Fix #1285, text_signature and raw ident interaction

This commit is contained in:
roblabla 2020-11-19 20:47:30 +00:00 committed by David Hewitt
parent d3f993a03e
commit d479b54b94
3 changed files with 32 additions and 1 deletions

View file

@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Fixed ### Fixed
- Fix missing field in `PyCodeObject` struct (`co_posonlyargcount`) - caused invalid access to other fields in Python >3.7. [#1260](https://github.com/PyO3/pyo3/pull/1260) - Fix missing field in `PyCodeObject` struct (`co_posonlyargcount`) - caused invalid access to other fields in Python >3.7. [#1260](https://github.com/PyO3/pyo3/pull/1260)
- Fix building for `x86_64-unknown-linux-musl` target from `x86_65-unknown-linux-gnu` host. [#1267](https://github.com/PyO3/pyo3/pull/1267) - Fix building for `x86_64-unknown-linux-musl` target from `x86_65-unknown-linux-gnu` host. [#1267](https://github.com/PyO3/pyo3/pull/1267)
- Fix `#[text_signature]` interacting badly with rust `r#raw_identifiers`. [#1286](https://github.com/PyO3/pyo3/pull/1286)
## [0.12.3] - 2020-10-12 ## [0.12.3] - 2020-10-12
### Fixed ### Fixed

View file

@ -237,7 +237,7 @@ impl<'a> FnSpec<'a> {
let text_signature = match &fn_type { let text_signature = match &fn_type {
FnType::Fn(_) | FnType::FnClass | FnType::FnStatic => { FnType::Fn(_) | FnType::FnClass | FnType::FnStatic => {
utils::parse_text_signature_attrs(&mut *meth_attrs, name)? utils::parse_text_signature_attrs(&mut *meth_attrs, &python_name)?
} }
FnType::FnNew => parse_erroneous_text_signature( FnType::FnNew => parse_erroneous_text_signature(
"text_signature not allowed on __new__; if you want to add a signature on \ "text_signature not allowed on __new__; if you want to add a signature on \

View file

@ -190,3 +190,33 @@ fn test_methods() {
"typeobj.static_method.__text_signature__ == '(d)'" "typeobj.static_method.__text_signature__ == '(d)'"
); );
} }
#[test]
#[cfg_attr(all(Py_LIMITED_API, not(Py_3_10)), ignore)]
fn test_raw_identifiers() {
#[pyclass]
#[text_signature = "($self)"]
struct r#MyClass {}
#[pymethods]
impl MyClass {
#[new]
fn new() -> MyClass {
MyClass {}
}
#[text_signature = "($self)"]
fn r#method(&self) {}
}
let gil = Python::acquire_gil();
let py = gil.python();
let typeobj = py.get_type::<MyClass>();
py_assert!(py, typeobj, "typeobj.__text_signature__ == '($self)'");
py_assert!(
py,
typeobj,
"typeobj.method.__text_signature__ == '($self)'"
);
}