1# Changelog 2 3All notable changes to this project will be documented in this file. 4 5This project adheres to [Semantic Versioning](https://semver.org). 6 7<!-- 8NOTE: In this file, do not use the hard wrap in the middle of a sentence for compatibility with GitHub comment style markdown rendering. 9--> 10 11## [Unreleased] 12 13## [1.0.10] - 2021-12-31 14 15- Revert the increase of the minimal version of `syn` that was done in 1.0.9. 16 17## [1.0.9] - 2021-12-26 18 19- [Prevent abuse of private module.](https://github.com/taiki-e/pin-project/pull/336) 20 21- Update minimal version of `syn` to 1.0.84. 22 23## [1.0.8] - 2021-07-21 24 25- [Suppress `clippy::use_self` and `clippy::type_repetition_in_bounds` lints in generated code.](https://github.com/taiki-e/pin-project/pull/331) 26 27## [1.0.7] - 2021-04-16 28 29- [Fix compile error when using `self::` as prefix of path inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/326) 30 31## [1.0.6] - 2021-03-25 32 33- [Suppress `clippy::semicolon_if_nothing_returned` lint in generated code.](https://github.com/taiki-e/pin-project/pull/318) 34 35## [1.0.5] - 2021-02-03 36 37- [Suppress `deprecated` lint in generated code.](https://github.com/taiki-e/pin-project/pull/313) 38 39## [1.0.4] - 2021-01-09 40 41- [Suppress `clippy::ref_option_ref` lint in generated code.](https://github.com/taiki-e/pin-project/pull/308) 42 43## [1.0.3] - 2021-01-05 44 45- Exclude unneeded files from crates.io. 46 47## [1.0.2] - 2020-11-18 48 49- [Suppress `clippy::unknown_clippy_lints` lint in generated code.](https://github.com/taiki-e/pin-project/pull/303) 50 51## [1.0.1] - 2020-10-15 52 53**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/commit/ddcd88079ba2d82857c365f2a3543ad146ade54c). 54 55- [Fix warnings when `#[pin_project]` attribute used within `macro_rules!` macros.](https://github.com/taiki-e/pin-project/pull/298) 56 57## [1.0.0] - 2020-10-13 58 59**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/commit/ddcd88079ba2d82857c365f2a3543ad146ade54c). 60 61- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](https://github.com/taiki-e/pin-project/pull/265) 62 63 Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead: 64 65 ```diff 66 - #[pin_project] 67 + #[pin_project(project = EnumProj)] 68 enum Enum<T> { 69 Variant(#[pin] T), 70 } 71 72 - #[project] 73 fn func<T>(x: Pin<&mut Enum<T>>) { 74 - #[project] 75 match x.project() { 76 - Enum::Variant(_) => { /* ... */ } 77 + EnumProj::Variant(_) => { /* ... */ } 78 } 79 } 80 ``` 81 82- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](https://github.com/taiki-e/pin-project/pull/266) Use `project_replace` argument instead. 83 84- [Optimize code generation when used on enums.](https://github.com/taiki-e/pin-project/pull/270) 85 86- [Raise the minimum supported Rust version of this crate from Rust 1.34 to Rust 1.37.](https://github.com/taiki-e/pin-project/pull/292) 87 88- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, `clippy::implicit_return`, and `clippy::redundant_pub_crate` lints in generated code. ([#276](https://github.com/taiki-e/pin-project/pull/276), [#277](https://github.com/taiki-e/pin-project/pull/277), [#284](https://github.com/taiki-e/pin-project/pull/284)) 89 90- Diagnostic improvements. 91 92Changes since the 1.0.0-alpha.1 release: 93 94- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-project/pull/287) 95 96- Update minimal version of `syn` to 1.0.44. 97 98## [1.0.0-alpha.1] - 2020-09-22 99 100- [Remove deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes.](https://github.com/taiki-e/pin-project/pull/265) 101 102 Name the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead: 103 104 ```diff 105 - #[pin_project] 106 + #[pin_project(project = EnumProj)] 107 enum Enum<T> { 108 Variant(#[pin] T), 109 } 110 111 - #[project] 112 fn func<T>(x: Pin<&mut Enum<T>>) { 113 - #[project] 114 match x.project() { 115 - Enum::Variant(_) => { /* ... */ } 116 + EnumProj::Variant(_) => { /* ... */ } 117 } 118 } 119 ``` 120 121- [Remove deprecated `Replace` argument from `#[pin_project]` attribute.](https://github.com/taiki-e/pin-project/pull/266) Use `project_replace` argument instead. 122 123- [Optimize code generation when used on enums.](https://github.com/taiki-e/pin-project/pull/270) 124 125- Suppress `explicit_outlives_requirements`, `box_pointers`, `clippy::large_enum_variant`, `clippy::pattern_type_mismatch`, and `clippy::implicit_return` lints in generated code. ([#276](https://github.com/taiki-e/pin-project/pull/276), [#277](https://github.com/taiki-e/pin-project/pull/277)) 126 127- Diagnostic improvements. 128 129See also [tracking issue for 1.0 release](https://github.com/taiki-e/pin-project/issues/264). 130 131## [0.4.29] - 2021-12-26 132 133- [Fix compile error with `syn` 1.0.84 and later.](https://github.com/taiki-e/pin-project/pull/335) 134 135## [0.4.28] - 2021-03-28 136 137**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 138 139- [Fix `unused_must_use` warning on unused borrows, which will be added to rustc in the future.](https://github.com/taiki-e/pin-project/pull/322) See [#322](https://github.com/taiki-e/pin-project/pull/322) for more details. 140 141 (NOTE: 1.0 does not have this problem.) 142 143## [0.4.27] - 2020-10-11 144 145**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 146 147- Update minimal version of `syn` to 1.0.44. 148 149## [0.4.26] - 2020-10-04 150 151**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 152 153- [Fix drop order of pinned fields in `project_replace`.](https://github.com/taiki-e/pin-project/pull/287) 154 155## [0.4.25] - 2020-10-01 156 157**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 158 159- [Suppress `drop_bounds` lint, which will be added to rustc in the future.](https://github.com/taiki-e/pin-project/pull/273) See [#272](https://github.com/taiki-e/pin-project/issues/272) for more details. 160 161 (NOTE: 1.0.0-alpha.1 already contains this change.) 162 163## [0.4.24] - 2020-09-26 164 165**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 166 167- [Fix compatibility of generated code with `forbid(future_incompatible)`.](https://github.com/taiki-e/pin-project/pull/282) 168 169 NOTE: This does not guarantee compatibility with `forbid(future_incompatible)` in the future. 170 If rustc adds a new lint, we may not be able to keep this. 171 172## [0.4.23] - 2020-07-27 173 174**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 175 176- [Fix compile error with `?Sized` type parameters.](https://github.com/taiki-e/pin-project/pull/263) 177 178## [0.4.22] - 2020-06-14 179 180**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 181 182- Documentation improvements. 183 184## [0.4.21] - 2020-06-13 185 186**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 187 188- [Deprecated `#[project]`, `#[project_ref]`, and `#[project_replace]` attributes due to some unfixable limitations.](https://github.com/taiki-e/pin-project/pull/244) 189 190 Consider naming the projected type by passing an argument with the same name as the method to the `#[pin_project]` attribute instead. 191 192 ```rust 193 #[pin_project(project = EnumProj)] 194 enum Enum<T> { 195 Variant(#[pin] T), 196 } 197 198 fn func<T>(x: Pin<&mut Enum<T>>) { 199 match x.project() { 200 EnumProj::Variant(y) => { 201 let _: Pin<&mut T> = y; 202 } 203 } 204 } 205 ``` 206 207 See [#225](https://github.com/taiki-e/pin-project/pull/225) for more details. 208 209- [Support `Self` in fields and generics in type definitions.](https://github.com/taiki-e/pin-project/pull/245) 210 211- [Fix errors involving *"`self` value is a keyword only available in methods with `self` parameter"* in apparently correct code.](https://github.com/taiki-e/pin-project/pull/250) 212 213- Diagnostic improvements. 214 215## [0.4.20] - 2020-06-07 216 217**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 218 219- [You can now use `project_replace` argument without Replace argument.](https://github.com/taiki-e/pin-project/pull/243) 220 This used to require you to specify both. 221 222 ```diff 223 - #[pin_project(Replace, project_replace = EnumProjOwn)] 224 + #[pin_project(project_replace = EnumProjOwn)] 225 enum Enum<T> { 226 Variant(#[pin] T) 227 } 228 ``` 229 230- [Make `project_replace` argument an alias for `Replace` argument so that it can be used without a value.](https://github.com/taiki-e/pin-project/pull/243) 231 232 ```rust 233 #[pin_project(project_replace)] 234 enum Enum<T> { 235 Variant(#[pin] T) 236 } 237 ``` 238 239 *The `Replace` argument will be deprecated in the future.* 240 241- [Suppress `unreachable_pub` lint in generated code.](https://github.com/taiki-e/pin-project/pull/240) 242 243## [0.4.19] - 2020-06-04 244 245**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 246 247- [Suppress `unused_results` lint in generated code.](https://github.com/taiki-e/pin-project/pull/239) 248 249## [0.4.18] - 2020-06-04 250 251**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 252 253- [Support `Self` in more syntax positions inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/230) 254 255- [Suppress `clippy::type_repetition_in_bounds` and `clippy::used_underscore_binding` lints in generated code.](https://github.com/taiki-e/pin-project/pull/233) 256 257- Documentation improvements. 258 259- Diagnostic improvements. 260 261## [0.4.17] - 2020-05-18 262 263**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 264 265- [Support naming the projection types.](https://github.com/taiki-e/pin-project/pull/202) 266 267 By passing an argument with the same name as the method to the attribute, you can name the projection type returned from the method: 268 269 ```rust 270 #[pin_project(project = EnumProj)] 271 enum Enum<T> { 272 Variant(#[pin] T), 273 } 274 275 fn func<T>(x: Pin<&mut Enum<T>>) { 276 match x.project() { 277 EnumProj::Variant(y) => { 278 let _: Pin<&mut T> = y; 279 } 280 } 281 } 282 ``` 283 284## [0.4.16] - 2020-05-11 285 286**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 287 288- [Fix an issue that users can call internal function generated by `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/223) 289 290## [0.4.15] - 2020-05-10 291 292**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 293 294- [`#[project]` attribute can now handle all `project*` attributes in that scope with one wrapper attribute.](https://github.com/taiki-e/pin-project/pull/220) 295 296## [0.4.14] - 2020-05-09 297 298**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 299 300- [Add `!Unpin` option to `#[pin_project]` attribute for guarantee the type is `!Unpin`.](https://github.com/taiki-e/pin-project/pull/219) 301 302 ```rust 303 #[pin_project(!Unpin)] 304 struct Struct<T, U> { 305 field: T, 306 } 307 ``` 308 309 This is equivalent to use `#[pin]` attribute for `PhantomPinned` field. 310 311 ```rust 312 #[pin_project] 313 struct Struct<T, U> { 314 field: T, 315 #[pin] // Note that using `PhantomPinned` without `#[pin]` attribute has no effect. 316 _pin: PhantomPinned, 317 } 318 ``` 319 320 *[NOTE: This raises the minimum supported Rust version of this crate from Rust 1.33 to Rust 1.34.](https://github.com/taiki-e/pin-project/pull/219#pullrequestreview-408644187)* 321 322- [Fix an issue where duplicate `#[project]` attributes were ignored.](https://github.com/taiki-e/pin-project/pull/218) 323 324- [Suppress `single_use_lifetimes` lint in generated code.](https://github.com/taiki-e/pin-project/pull/217) 325 326- [Support overlapping lifetime names in HRTB.](https://github.com/taiki-e/pin-project/pull/217) 327 328- [Hide generated items from --document-private-items.](https://github.com/taiki-e/pin-project/pull/211) See [#211](https://github.com/taiki-e/pin-project/pull/211) for details. 329 330- Documentation improvements. 331 332## [0.4.13] - 2020-05-07 333 334**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 335 336- [Fix a regression in 0.4.11.](https://github.com/taiki-e/pin-project/pull/207) 337 338 Changes from [0.4.10](https://github.com/taiki-e/pin-project/releases/tag/v0.4.10) and [0.4.12](https://github.com/taiki-e/pin-project/releases/tag/v0.4.12): 339 340 - [Fix an issue that `#[project]` on non-statement expression does not work without unstable features.](https://github.com/taiki-e/pin-project/pull/197) 341 342 - [Support overwriting the name of core crate.](https://github.com/taiki-e/pin-project/pull/199) 343 344 - [Suppress `clippy::needless_pass_by_value` lint in generated code of `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/200) 345 346 - Documentation improvements. 347 348 - Diagnostic improvements. 349 350## [0.4.12] - 2020-05-07 351 352**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 353 354- A release to avoid [a regression in 0.4.11](https://github.com/taiki-e/pin-project/issues/206). No code changes from [0.4.10](https://github.com/taiki-e/pin-project/releases/tag/v0.4.10). 355 356## [0.4.11] - 2020-05-07 357 358**NOTE:** This release has been yanked. See [#206](https://github.com/taiki-e/pin-project/issues/206) for details. 359 360- [Fix an issue that `#[project]` on non-statement expression does not work without unstable features.](https://github.com/taiki-e/pin-project/pull/197) 361 362- [Support overwriting the name of core crate.](https://github.com/taiki-e/pin-project/pull/199) 363 364- [Suppress `clippy::needless_pass_by_value` lint in generated code of `#[pinned_drop]`.](https://github.com/taiki-e/pin-project/pull/200) 365 366- Documentation improvements. 367 368- Diagnostic improvements. 369 370## [0.4.10] - 2020-05-04 371 372**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 373 374- [Add `project_replace` method and `#[project_replace]` attribute.](https://github.com/taiki-e/pin-project/pull/194) 375 `project_replace` method is optional and can be enabled by passing the `Replace` argument to `#[pin_project]` attribute. 376 See [the documentation](https://docs.rs/pin-project/0.4/pin_project/attr.pin_project.html#project_replace) for more details. 377 378- [Support `Self` and `self` in more syntax positions inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/190) 379 380- [Hide all generated items except for projected types from calling code.](https://github.com/taiki-e/pin-project/pull/192) See [#192](https://github.com/taiki-e/pin-project/pull/192) for details. 381 382## [0.4.9] - 2020-04-14 383 384**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 385 386- [Fix lifetime inference error when associated types are used in fields.](https://github.com/taiki-e/pin-project/pull/188) 387 388- [Fix compile error with tuple structs with `where` clauses.](https://github.com/taiki-e/pin-project/pull/186) 389 390- [`#[project]` attribute can now be used for `if let` expressions.](https://github.com/taiki-e/pin-project/pull/181) 391 392## [0.4.8] - 2020-01-27 393 394**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 395 396- [Ensure that users cannot implement `PinnedDrop` without proper attribute argument.](https://github.com/taiki-e/pin-project/pull/180) 397 398- [Fix use of `Self` in expression position inside `#[pinned_drop]` impl.](https://github.com/taiki-e/pin-project/pull/177) 399 400## [0.4.7] - 2020-01-20 401 402**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 403 404- [Fix support for lifetime bounds.](https://github.com/taiki-e/pin-project/pull/176) 405 406## [0.4.6] - 2019-11-20 407 408**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 409 410- [Fix compile error when there is `Self` in the where clause.](https://github.com/taiki-e/pin-project/pull/169) 411 412## [0.4.5] - 2019-10-21 413 414**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 415 416- [Fix compile error with `dyn` types.](https://github.com/taiki-e/pin-project/pull/158) 417 418## [0.4.4] - 2019-10-17 419 420**NOTE:** This release has been yanked because it [failed to compile with syn 1.0.84 and later](https://github.com/taiki-e/pin-project/pull/335). 421 422- [Fix an issue where `PinnedDrop` implementations can call unsafe code without an unsafe block.](https://github.com/taiki-e/pin-project/pull/149) 423 424## [0.4.3] - 2019-10-15 425 426**NOTE:** This release has been yanked. See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 427 428- [`#[pin_project]` can now interoperate with `#[cfg_attr()]`.](https://github.com/taiki-e/pin-project/pull/135) 429 430- [`#[pin_project]` can now interoperate with `#[cfg()]` on tuple structs and tuple variants.](https://github.com/taiki-e/pin-project/pull/135) 431 432- [Fix support for DSTs(Dynamically Sized Types) on `#[pin_project(UnsafeUnpin)]`](https://github.com/taiki-e/pin-project/pull/120) 433 434- Diagnostic improvements. 435 436## [0.4.2] - 2019-09-29 437 438**NOTE:** This release has been yanked. See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 439 440- [Fix support for DSTs(Dynamically Sized Types).](https://github.com/taiki-e/pin-project/pull/113) 441 442## [0.4.1] - 2019-09-26 443 444**NOTE:** This release has been yanked. See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 445 446- [Fix an issue that caused an error when using `#[pin_project]` on a type that has `#[pin]` + `!Unpin` field with no generics or lifetime.](https://github.com/taiki-e/pin-project/pull/111) 447 448## [0.4.0] - 2019-09-25 449 450**NOTE:** This release has been yanked. See [#148](https://github.com/taiki-e/pin-project/pull/148) for details. 451 452- [**Pin projection has become a safe operation.**](https://github.com/taiki-e/pin-project/pull/18) In the absence of other unsafe code that you write, it is impossible to cause undefined behavior. 453 454- `#[unsafe_project]` attribute has been replaced with `#[pin_project]` attribute. ([#18](https://github.com/taiki-e/pin-project/pull/18), [#33](https://github.com/taiki-e/pin-project/pull/33)) 455 456- [The `Unpin` argument has been removed - an `Unpin` impl is now generated by default.](https://github.com/taiki-e/pin-project/pull/18) 457 458- Drop impls must be specified with `#[pinned_drop]` instead of via a normal `Drop` impl. ([#18](https://github.com/taiki-e/pin-project/pull/18), [#33](https://github.com/taiki-e/pin-project/pull/33), [#86](https://github.com/taiki-e/pin-project/pull/86)) 459 460- [`Unpin` impls must be specified with an impl of `UnsafeUnpin`, instead of implementing the normal `Unpin` trait.](https://github.com/taiki-e/pin-project/pull/18) 461 462- [`#[pin_project]` attribute now determines the visibility of the projection type/method is based on the original type.](https://github.com/taiki-e/pin-project/pull/96) 463 464- [`#[pin_project]` can now be used for public type with private field types.](https://github.com/taiki-e/pin-project/pull/53) 465 466- [`#[pin_project]` can now interoperate with `#[cfg()]`.](https://github.com/taiki-e/pin-project/pull/77) 467 468- [Add `project_ref` method to `#[pin_project]` types.](https://github.com/taiki-e/pin-project/pull/93) 469 470- [Add `#[project_ref]` attribute.](https://github.com/taiki-e/pin-project/pull/93) 471 472- [Remove "project_attr" feature and always enable `#[project]` attribute.](https://github.com/taiki-e/pin-project/pull/94) 473 474- [`#[project]` attribute can now be used for `impl` blocks.](https://github.com/taiki-e/pin-project/pull/46) 475 476- [`#[project]` attribute can now be used for `use` statements.](https://github.com/taiki-e/pin-project/pull/85) 477 478- [`#[project]` attribute now supports `match` expressions at the position of the initializer expression of `let` expressions.](https://github.com/taiki-e/pin-project/pull/51) 479 480Changes since the 0.4.0-beta.1 release: 481 482- [Fix an issue that caused an error when using `#[pin_project(UnsafeUnpin)]` and not providing a manual `UnsafeUnpin` implementation on a type with no generics or lifetime.](https://github.com/taiki-e/pin-project/pull/107) 483 484## [0.4.0-beta.1] - 2019-09-21 485 486- [Change the argument type of project method back to `self: Pin<&mut Self>`.](https://github.com/taiki-e/pin-project/pull/90) 487 488- [Remove "project_attr" feature and always enable `#[project]` attribute.](https://github.com/taiki-e/pin-project/pull/94) 489 490- [Remove "renamed" feature.](https://github.com/taiki-e/pin-project/pull/100) 491 492- [`#[project]` attribute can now be used for `use` statements.](https://github.com/taiki-e/pin-project/pull/85) 493 494- [Add `project_ref` method and `#[project_ref]` attribute.](https://github.com/taiki-e/pin-project/pull/93) 495 496- [`#[pin_project]` attribute now determines the visibility of the projection type/method is based on the original type.](https://github.com/taiki-e/pin-project/pull/96) 497 498## [0.4.0-alpha.11] - 2019-09-11 499 500- [Change #[pinned_drop] to trait implementation.](https://github.com/taiki-e/pin-project/pull/86) 501 502 ```rust 503 #[pinned_drop] 504 impl<T> PinnedDrop for Foo<'_, T> { 505 fn drop(mut self: Pin<&mut Self>) { 506 **self.project().was_dropped = true; 507 } 508 } 509 ``` 510 511- Add some examples and generated code. 512 513- Diagnostic improvements. 514 515## [0.4.0-alpha.10] - 2019-09-07 516 517- [`#[pin_project]` can now interoperate with `#[cfg()]`.](https://github.com/taiki-e/pin-project/pull/77) 518 519- Documentation improvements. 520 521## [0.4.0-alpha.9] - 2019-09-05 522 523- [Add `project_into` method to `#[pin_project]` types](https://github.com/taiki-e/pin-project/pull/69). This can be useful when returning a pin projection from a method. 524 525 ```rust 526 fn get_pin_mut(self: Pin<&mut Self>) -> Pin<&mut T> { 527 self.project_into().pinned 528 } 529 ``` 530 531- [Prevent `UnpinStruct` from appearing in the document by default.](https://github.com/taiki-e/pin-project/pull/71) See [#71](https://github.com/taiki-e/pin-project/pull/71) for more details. 532 533## [0.4.0-alpha.8] - 2019-09-03 534 535- [Improve document of generated code.](https://github.com/taiki-e/pin-project/pull/62). Also added an option to control the document of generated code. See [#62](https://github.com/taiki-e/pin-project/pull/62) for more details. 536 537- [Diagnostic improvements.](https://github.com/taiki-e/pin-project/pull/61) 538 539## [0.4.0-alpha.7] - 2019-09-02 540 541- [Suppress `dead_code` lint in generated types.](https://github.com/taiki-e/pin-project/pull/57) 542 543## [0.4.0-alpha.6] - 2019-09-01 544 545- [Allow using `#[pin_project]` type with private field types](https://github.com/taiki-e/pin-project/pull/53) 546 547## [0.4.0-alpha.5] - 2019-08-24 548 549- [`#[project]` attribute now supports `match` expressions at the position of the initializer expression of `let` expressions.](https://github.com/taiki-e/pin-project/pull/51) 550 551## [0.4.0-alpha.4] - 2019-08-23 552 553- Suppress `clippy::drop_bounds` lint in generated code. 554 555## [0.4.0-alpha.3] - 2019-08-23 556 557- [Change `project` method generated by `#[pin_project]` attribute to take an `&mut Pin<&mut Self>` argument.](https://github.com/taiki-e/pin-project/pull/47) 558 559- [`#[project]` attribute can now be used for impl blocks.](https://github.com/taiki-e/pin-project/pull/46) 560 561- [`#[pin_project]` attribute can now detect that the type used does not have its own drop implementation without actually implementing drop.](https://github.com/taiki-e/pin-project/pull/48) This removed some restrictions. 562 563## [0.4.0-alpha.2] - 2019-08-13 564 565- Update `proc-macro2`, `syn`, and `quote` to 1.0. 566 567## [0.4.0-alpha.1] - 2019-08-11 568 569- **Pin projection has become a safe operation.** 570 571- `#[unsafe_project]` has been replaced with `#[pin_project]`. 572 573- The `Unpin` argument has been removed - an `Unpin` impl is now generated by default. 574 575- Drop impls must be specified with `#[pinned_drop]` instead of via a normal `Drop` impl. 576 577- `Unpin` impls must be specified with an impl of `UnsafeUnpin`, instead of implementing the normal `Unpin` trait. 578 579- Make `#[project]` attribute disabled by default. 580 581See also [tracking issue for 0.4 release](https://github.com/taiki-e/pin-project/issues/21). 582 583## [0.3.5] - 2019-08-14 584 585- Update `proc-macro2`, `syn`, and `quote` to 1.0. 586 587## [0.3.4] - 2019-07-21 588 589- Diagnostic improvements. 590 591## [0.3.3] - 2019-07-15 592 593**NOTE:** This release has been yanked. See [#16](https://github.com/taiki-e/pin-project/issues/16) for details. 594 595- Diagnostic improvements. 596 597## [0.3.2] - 2019-03-30 598 599- Avoid suffixes on tuple index. 600 601## [0.3.1] - 2019-03-02 602 603- Documentation improvements. 604 605- Update minimum `syn` version to 0.15.22. 606 607## [0.3.0] - 2019-02-20 608 609- Remove `unsafe_fields` attribute. 610 611- Remove `unsafe_variants` attribute. 612 613## [0.2.2] - 2019-02-20 614 615- Fix a bug that generates incorrect code for the some structures with trait bounds on type generics. 616 617## [0.2.1] - 2019-02-20 618 619- Fix a bug that generates incorrect code for the structures with where clause and associated type fields. 620 621## [0.2.0] - 2019-02-11 622 623- Make `unsafe_fields` optional. 624 625- Documentation improvements. 626 627## [0.1.8] - 2019-02-02 628 629- Add the feature to create projected enums to `unsafe_project`. 630 631- Add `project` attribute to support pattern matching. 632 633## [0.1.7] - 2019-01-19 634 635- Fix documentation. 636 637## [0.1.6] - 2019-01-19 638 639- `unsafe_fields` can now opt-out. 640 641- Add `unsafe_variants` attribute. This attribute is available if pin-project is built with the "unsafe_variants" feature. 642 643## [0.1.5] - 2019-01-17 644 645- Add support for tuple struct to `unsafe_project`. 646 647## [0.1.4] - 2019-01-12 648 649- Add options for automatically implementing `Unpin` to both `unsafe_project` and `unsafe_fields`. 650 651## [0.1.3] - 2019-01-11 652 653- Fix dependencies. 654 655- Add `unsafe_fields` attribute. 656 657## [0.1.2] - 2019-01-09 658 659- Documentation improvements. 660 661## [0.1.1] - 2019-01-08 662 663- Rename from `unsafe_pin_project` to `unsafe_project`. 664 665## [0.1.0] - 2019-01-08 666 667**NOTE:** This release has been yanked. 668 669Initial release 670 671[Unreleased]: https://github.com/taiki-e/pin-project/compare/v1.0.10...HEAD 672[1.0.10]: https://github.com/taiki-e/pin-project/compare/v1.0.9...v1.0.10 673[1.0.9]: https://github.com/taiki-e/pin-project/compare/v1.0.8...v1.0.9 674[1.0.8]: https://github.com/taiki-e/pin-project/compare/v1.0.7...v1.0.8 675[1.0.7]: https://github.com/taiki-e/pin-project/compare/v1.0.6...v1.0.7 676[1.0.6]: https://github.com/taiki-e/pin-project/compare/v1.0.5...v1.0.6 677[1.0.5]: https://github.com/taiki-e/pin-project/compare/v1.0.4...v1.0.5 678[1.0.4]: https://github.com/taiki-e/pin-project/compare/v1.0.3...v1.0.4 679[1.0.3]: https://github.com/taiki-e/pin-project/compare/v1.0.2...v1.0.3 680[1.0.2]: https://github.com/taiki-e/pin-project/compare/v1.0.1...v1.0.2 681[1.0.1]: https://github.com/taiki-e/pin-project/compare/v1.0.0...v1.0.1 682[1.0.0]: https://github.com/taiki-e/pin-project/compare/v1.0.0-alpha.1...v1.0.0 683[1.0.0-alpha.1]: https://github.com/taiki-e/pin-project/compare/v0.4.23...v1.0.0-alpha.1 684[0.4.29]: https://github.com/taiki-e/pin-project/compare/v0.4.28...v0.4.29 685[0.4.28]: https://github.com/taiki-e/pin-project/compare/v0.4.27...v0.4.28 686[0.4.27]: https://github.com/taiki-e/pin-project/compare/v0.4.26...v0.4.27 687[0.4.26]: https://github.com/taiki-e/pin-project/compare/v0.4.25...v0.4.26 688[0.4.25]: https://github.com/taiki-e/pin-project/compare/v0.4.24...v0.4.25 689[0.4.24]: https://github.com/taiki-e/pin-project/compare/v0.4.23...v0.4.24 690[0.4.23]: https://github.com/taiki-e/pin-project/compare/v0.4.22...v0.4.23 691[0.4.22]: https://github.com/taiki-e/pin-project/compare/v0.4.21...v0.4.22 692[0.4.21]: https://github.com/taiki-e/pin-project/compare/v0.4.20...v0.4.21 693[0.4.20]: https://github.com/taiki-e/pin-project/compare/v0.4.19...v0.4.20 694[0.4.19]: https://github.com/taiki-e/pin-project/compare/v0.4.18...v0.4.19 695[0.4.18]: https://github.com/taiki-e/pin-project/compare/v0.4.17...v0.4.18 696[0.4.17]: https://github.com/taiki-e/pin-project/compare/v0.4.16...v0.4.17 697[0.4.16]: https://github.com/taiki-e/pin-project/compare/v0.4.15...v0.4.16 698[0.4.15]: https://github.com/taiki-e/pin-project/compare/v0.4.14...v0.4.15 699[0.4.14]: https://github.com/taiki-e/pin-project/compare/v0.4.13...v0.4.14 700[0.4.13]: https://github.com/taiki-e/pin-project/compare/v0.4.11...v0.4.13 701[0.4.12]: https://github.com/taiki-e/pin-project/compare/v0.4.10...v0.4.12 702[0.4.11]: https://github.com/taiki-e/pin-project/compare/v0.4.10...v0.4.11 703[0.4.10]: https://github.com/taiki-e/pin-project/compare/v0.4.9...v0.4.10 704[0.4.9]: https://github.com/taiki-e/pin-project/compare/v0.4.8...v0.4.9 705[0.4.8]: https://github.com/taiki-e/pin-project/compare/v0.4.7...v0.4.8 706[0.4.7]: https://github.com/taiki-e/pin-project/compare/v0.4.6...v0.4.7 707[0.4.6]: https://github.com/taiki-e/pin-project/compare/v0.4.5...v0.4.6 708[0.4.5]: https://github.com/taiki-e/pin-project/compare/v0.4.4...v0.4.5 709[0.4.4]: https://github.com/taiki-e/pin-project/compare/v0.4.3...v0.4.4 710[0.4.3]: https://github.com/taiki-e/pin-project/compare/v0.4.2...v0.4.3 711[0.4.2]: https://github.com/taiki-e/pin-project/compare/v0.4.1...v0.4.2 712[0.4.1]: https://github.com/taiki-e/pin-project/compare/v0.4.0...v0.4.1 713[0.4.0]: https://github.com/taiki-e/pin-project/compare/v0.4.0-beta.1...v0.4.0 714[0.4.0-beta.1]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.11...v0.4.0-beta.1 715[0.4.0-alpha.11]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.10...v0.4.0-alpha.11 716[0.4.0-alpha.10]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.9...v0.4.0-alpha.10 717[0.4.0-alpha.9]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.8...v0.4.0-alpha.9 718[0.4.0-alpha.8]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.7...v0.4.0-alpha.8 719[0.4.0-alpha.7]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.6...v0.4.0-alpha.7 720[0.4.0-alpha.6]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.5...v0.4.0-alpha.6 721[0.4.0-alpha.5]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.4...v0.4.0-alpha.5 722[0.4.0-alpha.4]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.3...v0.4.0-alpha.4 723[0.4.0-alpha.3]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.2...v0.4.0-alpha.3 724[0.4.0-alpha.2]: https://github.com/taiki-e/pin-project/compare/v0.4.0-alpha.1...v0.4.0-alpha.2 725[0.4.0-alpha.1]: https://github.com/taiki-e/pin-project/compare/v0.3.5...v0.4.0-alpha.1 726[0.3.5]: https://github.com/taiki-e/pin-project/compare/v0.3.4...v0.3.5 727[0.3.4]: https://github.com/taiki-e/pin-project/compare/v0.3.3...v0.3.4 728[0.3.3]: https://github.com/taiki-e/pin-project/compare/v0.3.2...v0.3.3 729[0.3.2]: https://github.com/taiki-e/pin-project/compare/v0.3.1...v0.3.2 730[0.3.1]: https://github.com/taiki-e/pin-project/compare/v0.3.0...v0.3.1 731[0.3.0]: https://github.com/taiki-e/pin-project/compare/v0.2.2...v0.3.0 732[0.2.2]: https://github.com/taiki-e/pin-project/compare/v0.2.1...v0.2.2 733[0.2.1]: https://github.com/taiki-e/pin-project/compare/v0.2.0...v0.2.1 734[0.2.0]: https://github.com/taiki-e/pin-project/compare/v0.1.8...v0.2.0 735[0.1.8]: https://github.com/taiki-e/pin-project/compare/v0.1.7...v0.1.8 736[0.1.7]: https://github.com/taiki-e/pin-project/compare/v0.1.6...v0.1.7 737[0.1.6]: https://github.com/taiki-e/pin-project/compare/v0.1.5...v0.1.6 738[0.1.5]: https://github.com/taiki-e/pin-project/compare/v0.1.4...v0.1.5 739[0.1.4]: https://github.com/taiki-e/pin-project/compare/v0.1.3...v0.1.4 740[0.1.3]: https://github.com/taiki-e/pin-project/compare/v0.1.2...v0.1.3 741[0.1.2]: https://github.com/taiki-e/pin-project/compare/v0.1.1...v0.1.2 742[0.1.1]: https://github.com/taiki-e/pin-project/compare/v0.1.0...v0.1.1 743[0.1.0]: https://github.com/taiki-e/pin-project/releases/tag/v0.1.0 744