-
Notifications
You must be signed in to change notification settings - Fork 791
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
Automatically generate __text_signature__
for all functions
#2784
Conversation
3c7ca8f
to
226f764
Compare
To be honest, |
Will try to change this to use |
426023f
to
663a436
Compare
bors r+ |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed: |
663a436
to
5039fd7
Compare
bors r+ |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. 2813: ci: run pyo3-ffi-check using nox r=davidhewitt a=davidhewitt Makes it easier to run pyo3-ffi-check locally :) Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed (retrying...): |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed: |
bors retry |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed: |
bors r+ |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. 2827: pypy: enable `PyList::get_item_unchecked` r=davidhewitt a=davidhewitt Split out from #2826. Approved previously as part of that review. Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed (retrying...): |
2784: Automatically generate `__text_signature__` for all functions r=davidhewitt a=davidhewitt This PR makes it so that PyO3 generates `__text_signature__` by default for all functions. It also introduces `#[pyo3(text_signature = false)]` to disable the built-in generation. There are a few limitations which we can improve later: - All default values are currently set to `...`. I think this is ok because `.pyi` files often do the same. Maybe for numbers, strings, `None` and `True`/`False` we could render these in a future PR. - No support for `#[new]` yet. Alternative design ideas: - Only autogenerate for methods with `#[pyo3(signature = (...))]` annotation. I started with this, and then decided it made sense to do it for everything. - Opt-out with `#[pyo3(text_signature = None)]`. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change from `text_signature = false` to `text_signature = None`. There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review. Co-authored-by: David Hewitt <1939362+davidhewitt@users.noreply.github.com>
Build failed: |
bors r+ |
Build succeeded: |
This PR makes it so that PyO3 generates
__text_signature__
by default for all functions. It also introduces#[pyo3(text_signature = false)]
to disable the built-in generation.There are a few limitations which we can improve later:
...
. I think this is ok because.pyi
files often do the same. Maybe for numbers, strings,None
andTrue
/False
we could render these in a future PR.#[new]
yet.Alternative design ideas:
#[pyo3(signature = (...))]
annotation. I started with this, and then decided it made sense to do it for everything.#[pyo3(text_signature = None)]
. This is slightly harder to parse in the macro, but matches the final result in Python better, so if this looks preferable to others, I can change fromtext_signature = false
totext_signature = None
.There's some small tidying up / refactoring to do before this merges (happy to take suggestions on this), however the general logic, design and docs are ready for review.