• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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