1 use rustc_errors::MultiSpan;
2 use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
3 use rustc_middle::ty::{GenericArg, Ty};
6 use crate::diagnostics::RegionName;
9 #[diag(borrowck_move_unsized, code = "E0161")]
10 pub(crate) struct MoveUnsized<'tcx> {
18 #[diag(borrowck_higher_ranked_lifetime_error)]
19 pub(crate) struct HigherRankedLifetimeError {
21 pub cause: Option<HigherRankedErrorCause>,
26 #[derive(Subdiagnostic)]
27 pub(crate) enum HigherRankedErrorCause {
28 #[note(borrowck_could_not_prove)]
29 CouldNotProve { predicate: String },
30 #[note(borrowck_could_not_normalize)]
31 CouldNotNormalize { value: String },
35 #[diag(borrowck_higher_ranked_subtype_error)]
36 pub(crate) struct HigherRankedSubtypeError {
42 #[diag(borrowck_generic_does_not_live_long_enough)]
43 pub(crate) struct GenericDoesNotLiveLongEnough {
49 #[derive(LintDiagnostic)]
50 #[diag(borrowck_var_does_not_need_mut)]
51 pub(crate) struct VarNeedNotMut {
52 #[suggestion(style = "short", applicability = "machine-applicable", code = "")]
56 #[diag(borrowck_var_cannot_escape_closure)]
58 #[note(cannot_escape)]
59 pub(crate) struct FnMutError {
63 pub ty_err: FnMutReturnTypeErr,
66 #[derive(Subdiagnostic)]
67 pub(crate) enum VarHereDenote {
68 #[label(borrowck_var_here_captured)]
73 #[label(borrowck_var_here_defined)]
78 #[label(borrowck_closure_inferred_mut)]
85 #[derive(Subdiagnostic)]
86 pub(crate) enum FnMutReturnTypeErr {
87 #[label(borrowck_returned_closure_escaped)]
92 #[label(borrowck_returned_async_block_escaped)]
97 #[label(borrowck_returned_ref_escaped)]
104 #[derive(Diagnostic)]
105 #[diag(borrowck_lifetime_constraints_error)]
106 pub(crate) struct LifetimeOutliveErr {
111 #[derive(Subdiagnostic)]
112 pub(crate) enum LifetimeReturnCategoryErr<'a> {
113 #[label(borrowck_returned_lifetime_wrong)]
117 mir_def_name: &'a str,
118 outlived_fr_name: RegionName,
119 fr_name: &'a RegionName,
121 #[label(borrowck_returned_lifetime_short)]
125 category_desc: &'static str,
126 free_region_name: &'a RegionName,
127 outlived_fr_name: RegionName,
131 #[derive(Subdiagnostic)]
132 pub(crate) enum RequireStaticErr {
133 #[note(borrowck_used_impl_require_static)]
136 multi_span: MultiSpan,
140 #[derive(Subdiagnostic)]
141 pub(crate) enum CaptureVarPathUseCause {
142 #[label(borrowck_borrow_due_to_use_generator)]
147 #[label(borrowck_use_due_to_use_generator)]
152 #[label(borrowck_assign_due_to_use_generator)]
157 #[label(borrowck_assign_part_due_to_use_generator)]
158 AssignPartInGenerator {
162 #[label(borrowck_borrow_due_to_use_closure)]
167 #[label(borrowck_use_due_to_use_closure)]
172 #[label(borrowck_assign_due_to_use_closure)]
177 #[label(borrowck_assign_part_due_to_use_closure)]
178 AssignPartInClosure {
184 #[derive(Subdiagnostic)]
185 pub(crate) enum CaptureVarKind {
186 #[label(borrowck_capture_immute)]
191 #[label(borrowck_capture_mut)]
196 #[label(borrowck_capture_move)]
203 #[derive(Subdiagnostic)]
204 pub(crate) enum CaptureVarCause {
205 #[label(borrowck_var_borrow_by_use_place_in_generator)]
206 BorrowUsePlaceGenerator {
211 #[label(borrowck_var_borrow_by_use_place_in_closure)]
212 BorrowUsePlaceClosure {
219 #[derive(Diagnostic)]
220 #[diag(borrowck_cannot_move_when_borrowed, code = "E0505")]
221 pub(crate) struct MoveBorrow<'a> {
223 pub borrow_place: &'a str,
224 pub value_place: &'a str,
229 pub borrow_span: Span,
232 #[derive(Diagnostic)]
233 #[diag(borrowck_opaque_type_non_generic_param, code = "E0792")]
234 pub(crate) struct NonGenericOpaqueTypeParam<'a, 'tcx> {
235 pub ty: GenericArg<'tcx>,
240 pub param_span: Span,