From unknown Wed Jun 18 23:06:32 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#77914 <77914@debbugs.gnu.org> To: bug#77914 <77914@debbugs.gnu.org> Subject: Status: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color Reply-To: bug#77914 <77914@debbugs.gnu.org> Date: Thu, 19 Jun 2025 06:06:32 +0000 retitle 77914 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode = lost all color reassign 77914 emacs submitter 77914 Eval Exec severity 77914 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 19 01:11:39 2025 Received: (at submit) by debbugs.gnu.org; 19 Apr 2025 05:11:39 +0000 Received: from localhost ([127.0.0.1]:55421 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u60UJ-0005nA-PF for submit@debbugs.gnu.org; Sat, 19 Apr 2025 01:11:39 -0400 Received: from lists.gnu.org ([2001:470:142::17]:38368) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u60UD-0005kh-Cn for submit@debbugs.gnu.org; Sat, 19 Apr 2025 01:11:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u60Tt-0001gK-NF for bug-gnu-emacs@gnu.org; Sat, 19 Apr 2025 01:11:11 -0400 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u60To-0006QC-8j for bug-gnu-emacs@gnu.org; Sat, 19 Apr 2025 01:11:09 -0400 Received: by mail-pj1-x1042.google.com with SMTP id 98e67ed59e1d1-3085f827538so3095972a91.0 for ; Fri, 18 Apr 2025 22:11:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745039461; x=1745644261; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:user-agent :subject:to:from:from:to:cc:subject:date:message-id:reply-to; bh=ZNeiPBEEKfVK1uV5D9t6AMn8Jf8AbAX+EbU2lCWVPSI=; b=Hlls9RKiTWefORVqVCBhpXrGeB/Fn2zqPGFxQilq4b8kOEbu+wf2m0vFzYLjil1Z5Z Nin5ttU6YU2nHfmWRoVaMnfpjyShMcmkUTUDDx3Rl5YXGm9Cc0s6SvPbtUZjLOLgixoy SDsC4hUA5quE/sgo5ctKeE3frjF3Q/2WPib74Sf5Nvw9o4hy5utwy/FMDIruUa3CEjhg KKij2RQit8a4spYqV2cMYthOe82lCB+fHoLwvlELNhQ77OUvapSfmjmyNwLvWY7XWLG2 8D9mPmnWjdIayFrSuwXkT1fClm9rZwjdbCMLpsrlq/sSa34gWxW5VmErD87dMxreYtaB d+jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745039461; x=1745644261; h=content-transfer-encoding:mime-version:message-id:date:user-agent :subject:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ZNeiPBEEKfVK1uV5D9t6AMn8Jf8AbAX+EbU2lCWVPSI=; b=urco1GbCwNjrwd+lTTqbkAXRZHDZxPpUfTFZ8MmCBUEFDG9VWUpb5uE9+nCCN1WtFb HqC7oPJpuTJuQxrdpbZ46dXRz1oCXjJCrCPd9TDIZaOY69gyt1y73oFVRloDP/cz4Jqt PuB7yzfvxoossU4lwtXRrhBB+N6qQocp89hg5r9aJmjB4aMC4ziURTPh0qdhqOTETaL3 sm12oOJqjI6fh5RJl9AaejgvISH2N6mp8S/rdZJIEDTqxyiYtNfPt5mxm4BtBWGzb3za bAzskdD5EwBs71DmmTVl7Sn303XZ8+bgHpbBAOm+VMwamd2Ec2Pr5LyOqIApdKQLfWtO zTNA== X-Gm-Message-State: AOJu0YxSWdLo1XQSwX+kE/QQVKQNwDJJ0naEme92iN6Ahl4ygiIlYWix PO3XDIcPHilpwkmqyXgopf2wng5aX5V1AHG6YkpadfhmLtuiQaNgUAA8cIE8LQHulQ== X-Gm-Gg: ASbGncssgdpeQwR7RhsIZO3bMji1/oH0EU3t4xZWiluB+vrZuafJ46c9TBAXYeeXron AbblmTo0rLD6tMhhuewMUswqGdQfhxsyT4LcfUPMI3GpTDbZOuBLrf4Oq9XYbhKMRMYkR36eUe2 uXtC82j0Odbs2JK9igctItMwGsO3Z+j7wwwKefDPaO9+F3WLzvjVmltSvREUxpSNx6sBwCJhD2c 43GTi8oUsLSOyuSFdbDSTE9K484RbLICEZ/vNKiKX7F6YobdQ6wFwXVFm87bB2o1PabTDtEkDbk M/aUNw8Lo/bhpRG484bl/ZyfRwwg/nFnFk1HXRlEl6Sl2NhwXhWUtIlP X-Google-Smtp-Source: AGHT+IHkbzWY+03JxXiH/bRD98qhSKxmsR4YyoUZg2pmZWQrJxs2vZe97CJH96K5JgI1HR+63Q5Kdw== X-Received: by 2002:a17:90a:c2d0:b0:2ee:b8ac:73b0 with SMTP id 98e67ed59e1d1-3087bb3f2cemr7674734a91.2.1745039459467; Fri, 18 Apr 2025 22:10:59 -0700 (PDT) Received: from localhost (45.78.53.254.16clouds.com. [45.78.53.254]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c50bdb1ddsm25954395ad.24.2025.04.18.22.10.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Apr 2025 22:10:58 -0700 (PDT) From: Eval Exec To: bug-gnu-emacs@gnu.org Subject: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color User-Agent: mu4e 1.12.9; emacs 31.0.50 X-Debbugs-Cc: Date: Sat, 19 Apr 2025 13:10:57 +0800 Message-ID: <877c3gka72.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2607:f8b0:4864:20::1042; envelope-from=execvy@gmail.com; helo=mail-pj1-x1042.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Hello, I'm visiting a rust file, when I set treesit-font-lock-level to 3, all color are good, when I set treesit-font-lock-level to 4, all color as lost. To reproduce this: use this rust file: Then eval: 1. (progn (setq treesit-font-lock-level 4) (revert-buffer))=20 all color are lost. 2. (progn (setq treesit-font-lock-level 4) (revert-buffer)) colors are good. 3. (progn (setq treesit-font-lock-level 4) (revert-buffer))=20 all color are lost again. ```rust //! Primitive traits and types representing basic properties of types. //! //! Rust types can be classified in various useful ways according to //! their intrinsic properties. These classifications are represented //! as traits. #![stable(feature =3D "rust1", since =3D "1.0.0")] use crate::cell::UnsafeCell; use crate::cmp; use crate::fmt::Debug; use crate::hash::{Hash, Hasher}; /// Implements a given marker trait for multiple types at the same time. /// /// The basic syntax looks like this: /// ```ignore private macro /// marker_impls! { MarkerTrait for u8, i8 } /// ``` /// You can also implement `unsafe` traits /// ```ignore private macro /// marker_impls! { unsafe MarkerTrait for u8, i8 } /// ``` /// Add attributes to all impls: /// ```ignore private macro /// marker_impls! { /// #[allow(lint)] /// #[unstable(feature =3D "marker_trait", issue =3D "none")] /// MarkerTrait for u8, i8 /// } /// ``` /// And use generics: /// ```ignore private macro /// marker_impls! { /// MarkerTrait for /// u8, i8, /// {T: ?Sized} *const T, /// {T: ?Sized} *mut T, /// {T: MarkerTrait} PhantomData, /// u32, /// } /// ``` #[unstable(feature =3D "internal_impls_macro", issue =3D "none")] // Allow implementations of `UnsizedConstParamTy` even though std cannot us= e that feature. #[allow_internal_unstable(unsized_const_params)] macro marker_impls { ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, $= ($rest:tt)*)? ) =3D> { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for $T {} marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? } }, ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {}, ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:t= y $(, $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* unsafe impl< $($($bounds)*)? > $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for $($($rest)*)? } }, ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {}, } /// Types that can be transferred across thread boundaries. /// /// This trait is automatically implemented when the compiler determines it= 's /// appropriate. /// /// An example of a non-`Send` type is the reference-counting pointer /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point to= the same /// reference-counted value, they might try to update the reference count a= t the /// same time, which is [undefined behavior][ub] because [`Rc`] doesn't use= atomic /// operations. Its cousin [`sync::Arc`][arc] does use atomic operations (i= ncurring /// some overhead) and thus is `Send`. /// /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`] tr= ait for more details. /// /// [`Rc`]: ../../std/rc/struct.Rc.html /// [arc]: ../../std/sync/struct.Arc.html /// [ub]: ../../reference/behavior-considered-undefined.html #[stable(feature =3D "rust1", since =3D "1.0.0")] #[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")] #[diagnostic::on_unimplemented( message =3D "`{Self}` cannot be sent between threads safely", label =3D "`{Self}` cannot be sent between threads safely" )] pub unsafe auto trait Send { // empty. } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl !Send for *const T {} #[stable(feature =3D "rust1", since =3D "1.0.0")] impl !Send for *mut T {} // Most instances arise automatically, but this instance is needed to link = up `T: Sync` with // `&T: Send` (and it also removes the unsound default instance `T Send` ->= `&T: Send` that would // otherwise exist). #[stable(feature =3D "rust1", since =3D "1.0.0")] unsafe impl Send for &T {} /// Types with a constant size known at compile time. /// /// All type parameters have an implicit bound of `Sized`. The special synt= ax /// `?Sized` can be used to remove this bound if it's not appropriate. /// /// ``` /// # #![allow(dead_code)] /// struct Foo(T); /// struct Bar(T); /// /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for [i= 32] /// struct BarUse(Bar<[i32]>); // OK /// ``` /// /// The one exception is the implicit `Self` type of a trait. A trait does = not /// have an implicit `Sized` bound as this is incompatible with [trait obje= ct]s /// where, by definition, the trait needs to work with all possible impleme= ntors, /// and thus could be any size. /// /// Although Rust will let you bind `Sized` to a trait, you won't /// be able to use it to form a trait object later: /// /// ``` /// # #![allow(unused_variables)] /// trait Foo { } /// trait Bar: Sized { } /// /// struct Impl; /// impl Foo for Impl { } /// impl Bar for Impl { } /// /// let x: &dyn Foo =3D &Impl; // OK /// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot /// // be made into an object /// ``` /// /// [trait object]: ../../book/ch17-02-trait-objects.html #[doc(alias =3D "?", alias =3D "?Sized")] #[stable(feature =3D "rust1", since =3D "1.0.0")] #[lang =3D "sized"] #[diagnostic::on_unimplemented( message =3D "the size for values of type `{Self}` cannot be known at co= mpilation time", label =3D "doesn't have a size known at compile-time" )] #[fundamental] // for Default, for example, which requires that `[T]: !Defa= ult` be evaluatable #[rustc_specialization_trait] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] #[rustc_coinductive] pub trait Sized { // Empty. } /// Types that can be "unsized" to a dynamically-sized type. /// /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>` a= nd /// `Unsize`. /// /// All implementations of `Unsize` are provided automatically by the compi= ler. /// Those implementations are: /// /// - Arrays `[T; N]` implement `Unsize<[T]>`. /// - A type implements `Unsize` if all of these conditions= are met: /// - The type implements `Trait`. /// - `Trait` is dyn-compatible[^1]. /// - The type is sized. /// - The type outlives `'a`. /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize>` /// where any number of (type and const) parameters may be changed if all o= f these conditions /// are met: /// - Only the last field of `Foo` has a type involving the parameters `T= 1`, ..., `Tn`. /// - All other parameters of the struct are equal. /// - `Field: Unsize>`, where `Field<...>= ` stands for the actual /// type of the struct's last field. /// /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow /// "user-defined" containers such as [`Rc`] to contain dynamically-sized /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on coe= rcion][nomicon-coerce] /// for more details. /// /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized /// [`Rc`]: ../../std/rc/struct.Rc.html /// [RFC982]: https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-c= oercion.md /// [nomicon-coerce]: ../../nomicon/coercions.html /// [^1]: Formerly known as *object safe*. #[unstable(feature =3D "unsize", issue =3D "18598")] #[lang =3D "unsize"] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] pub trait Unsize { // Empty. } /// Required trait for constants used in pattern matches. /// /// Any type that derives `PartialEq` automatically implements this trait, /// *regardless* of whether its type-parameters implement `PartialEq`. /// /// If a `const` item contains some type that does not implement this trait, /// then that type either (1.) does not implement `PartialEq` (which means = the /// constant will not provide that comparison method, which code generation /// assumes is available), or (2.) it implements *its own* version of /// `PartialEq` (which we assume does not conform to a structural-equality /// comparison). /// /// In either of the two scenarios above, we reject usage of such a constan= t in /// a pattern match. /// /// See also the [structural match RFC][RFC1445], and [issue 63438] which /// motivated migrating from an attribute-based design to this trait. /// /// [RFC1445]: https://github.com/rust-lang/rfcs/blob/master/text/1445-rest= rict-constants-in-patterns.md /// [issue 63438]: https://github.com/rust-lang/rust/issues/63438 #[unstable(feature =3D "structural_match", issue =3D "31434")] #[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not `#[d= erive(PartialEq)]`")] #[lang =3D "structural_peq"] pub trait StructuralPartialEq { // Empty. } marker_impls! { #[unstable(feature =3D "structural_match", issue =3D "31434")] StructuralPartialEq for usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, bool, char, str /* Technically requires `[u8]: StructuralPartialEq` */, (), {T, const N: usize} [T; N], {T} [T], {T: ?Sized} &T, } /// Types whose values can be duplicated simply by copying bits. /// /// By default, variable bindings have 'move semantics.' In other /// words: /// /// ``` /// #[derive(Debug)] /// struct Foo; /// /// let x =3D Foo; /// /// let y =3D x; /// /// // `x` has moved into `y`, and so cannot be used /// /// // println!("{x:?}"); // error: use of moved value /// ``` /// /// However, if a type implements `Copy`, it instead has 'copy semantics': /// /// ``` /// // We can derive a `Copy` implementation. `Clone` is also required, as = it's /// // a supertrait of `Copy`. /// #[derive(Debug, Copy, Clone)] /// struct Foo; /// /// let x =3D Foo; /// /// let y =3D x; /// /// // `y` is a copy of `x` /// /// println!("{x:?}"); // A-OK! /// ``` /// /// It's important to note that in these two examples, the only difference = is whether you /// are allowed to access `x` after the assignment. Under the hood, both a = copy and a move /// can result in bits being copied in memory, although this is sometimes o= ptimized away. /// /// ## How can I implement `Copy`? /// /// There are two ways to implement `Copy` on your type. The simplest is to= use `derive`: /// /// ``` /// #[derive(Copy, Clone)] /// struct MyStruct; /// ``` /// /// You can also implement `Copy` and `Clone` manually: /// /// ``` /// struct MyStruct; /// /// impl Copy for MyStruct { } /// /// impl Clone for MyStruct { /// fn clone(&self) -> MyStruct { /// *self /// } /// } /// ``` /// /// There is a small difference between the two. The `derive` strategy will= also place a `Copy` /// bound on type parameters: /// /// ``` /// #[derive(Clone)] /// struct MyStruct(T); /// /// impl Copy for MyStruct { } /// ``` /// /// This isn't always desired. For example, shared references (`&T`) can be= copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct containing markers su= ch as [`PhantomData`] /// could potentially be duplicated with a bit-wise copy. /// /// ## What's the difference between `Copy` and `Clone`? /// /// Copies happen implicitly, for example as part of an assignment `y =3D x= `. The behavior of /// `Copy` is not overloadable; it is always a simple bit-wise copy. /// /// Cloning is an explicit action, `x.clone()`. The implementation of [`Clo= ne`] can /// provide any type-specific behavior necessary to duplicate values safely= . For example, /// the implementation of [`Clone`] for [`String`] needs to copy the pointe= d-to string /// buffer in the heap. A simple bitwise copy of [`String`] values would me= rely copy the /// pointer, leading to a double free down the line. For this reason, [`Str= ing`] is [`Clone`] /// but not `Copy`. /// /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` must= also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`] implementation only n= eeds to return `*self` /// (see the example above). /// /// ## When can my type be `Copy`? /// /// A type can implement `Copy` if all of its components implement `Copy`. = For example, this /// struct can be `Copy`: /// /// ``` /// # #[allow(dead_code)] /// #[derive(Copy, Clone)] /// struct Point { /// x: i32, /// y: i32, /// } /// ``` /// /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is eli= gible to be `Copy`. /// By contrast, consider /// /// ``` /// # #![allow(dead_code)] /// # struct Point; /// struct PointList { /// points: Vec, /// } /// ``` /// /// The struct `PointList` cannot implement `Copy`, because [`Vec`] is n= ot `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get an error: /// /// ```text /// the trait `Copy` cannot be implemented for this type; field `points` do= es not implement `Copy` /// ``` /// /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, even= when it holds /// shared references of types `T` that are *not* `Copy`. Consider the foll= owing struct, /// which can implement `Copy`, because it only holds a *shared reference* = to our non-`Copy` /// type `PointList` from above: /// /// ``` /// # #![allow(dead_code)] /// # struct PointList; /// #[derive(Copy, Clone)] /// struct PointListWrapper<'a> { /// point_list_ref: &'a PointList, /// } /// ``` /// /// ## When *can't* my type be `Copy`? /// /// Some types can't be copied safely. For example, copying `&mut T` would = create an aliased /// mutable reference. Copying [`String`] would duplicate responsibility fo= r managing the /// [`String`]'s buffer, leading to a double free. /// /// Generalizing the latter case, any type implementing [`Drop`] can't be `= Copy`, because it's /// managing some resource besides its own [`size_of::`] bytes. /// /// If you try to implement `Copy` on a struct or enum containing non-`Copy= ` data, you will get /// the error [E0204]. /// /// [E0204]: ../../error_codes/E0204.html /// /// ## When *should* my type be `Copy`? /// /// Generally speaking, if your type _can_ implement `Copy`, it should. Kee= p in mind, though, /// that implementing `Copy` is part of the public API of your type. If the= type might become /// non-`Copy` in the future, it could be prudent to omit the `Copy` implem= entation now, to /// avoid a breaking API change. /// /// ## Additional implementors /// /// In addition to the [implementors listed below][impls], /// the following types also implement `Copy`: /// /// * Function item types (i.e., the distinct types defined for each functi= on) /// * Function pointer types (e.g., `fn() -> i32`) /// * Closure types, if they capture no value from the environment /// or if all such captured values implement `Copy` themselves. /// Note that variables captured by shared reference always implement `Co= py` /// (even if the referent doesn't), /// while variables captured by mutable reference never implement `Copy`. /// /// [`Vec`]: ../../std/vec/struct.Vec.html /// [`String`]: ../../std/string/struct.String.html /// [`size_of::`]: crate::mem::size_of /// [impls]: #implementors #[stable(feature =3D "rust1", since =3D "1.0.0")] #[lang =3D "copy"] // FIXME(matthewjasper) This allows copying a type that doesn't implement // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when only // `A<'static>: Copy` and `A<'_>: Clone`). // We have this attribute here for now only because there are quite a few // existing specializations on `Copy` that already exist in the standard // library, and there's no way to safely have this behavior right now. #[rustc_unsafe_specialization_marker] #[rustc_diagnostic_item =3D "Copy"] pub trait Copy: Clone { // Empty. } /// Derive macro generating an impl of the trait `Copy`. #[rustc_builtin_macro] #[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")] #[allow_internal_unstable(core_intrinsics, derive_clone_copy)] pub macro Copy($item:item) { /* compiler built-in */ } // Implementations of `Copy` for primitive types. // // Implementations that cannot be described in Rust // are implemented in `traits::SelectionContext::copy_clone_conditions()` // in `rustc_trait_selection`. marker_impls! { #[stable(feature =3D "rust1", since =3D "1.0.0")] Copy for usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, f16, f32, f64, f128, bool, char, {T: ?Sized} *const T, {T: ?Sized} *mut T, } #[unstable(feature =3D "never_type", issue =3D "35121")] impl Copy for ! {} /// Shared references can be copied, but mutable references *cannot*! #[stable(feature =3D "rust1", since =3D "1.0.0")] impl Copy for &T {} /// Types for which it is safe to share references between threads. /// /// This trait is automatically implemented when the compiler determines /// it's appropriate. /// /// The precise definition is: a type `T` is [`Sync`] if and only if `&T` is /// [`Send`]. In other words, if there is no possibility of /// [undefined behavior][ub] (including data races) when passing /// `&T` references between threads. /// /// As one would expect, primitive types like [`u8`] and [`f64`] /// are all [`Sync`], and so are simple aggregate types containing them, /// like tuples, structs and enums. More examples of basic [`Sync`] /// types include "immutable" types like `&T`, and those with simple /// inherited mutability, such as [`Box`][box], [`Vec`][vec] and /// most other collection types. (Generic parameters need to be [`Sync`] /// for their container to be [`Sync`].) /// /// A somewhat surprising consequence of the definition is that `&mut T` /// is `Sync` (if `T` is `Sync`) even though it seems like that might /// provide unsynchronized mutation. The trick is that a mutable /// reference behind a shared reference (that is, `& &mut T`) /// becomes read-only, as if it were a `& &T`. Hence there is no risk /// of a data race. /// /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing: /// * `&T` is [`Send`] if and only if `T` is [`Sync`] /// * `&mut T` is [`Send`] if and only if `T` is [`Send`] /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`] /// /// Types that are not `Sync` are those that have "interior /// mutability" in a non-thread-safe form, such as [`Cell`][cell] /// and [`RefCell`][refcell]. These types allow for mutation of /// their contents even through an immutable, shared reference. For /// example the `set` method on [`Cell`][cell] takes `&self`, so it requ= ires /// only a shared reference [`&Cell`][cell]. The method performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`. /// /// Another example of a non-`Sync` type is the reference-counting /// pointer [`Rc`][rc]. Given any reference [`&Rc`][rc], you can clone /// a new [`Rc`][rc], modifying the reference counts in a non-atomic way. /// /// For cases when one does need thread-safe interior mutability, /// Rust provides [atomic data types], as well as explicit locking via /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types /// ensure that any mutation cannot cause data races, hence the types /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe /// analogue of [`Rc`][rc]. /// /// Any types with interior mutability must also use the /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which /// can be mutated through a shared reference. Failing to doing this is /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing /// from `&T` to `&mut T` is invalid. /// /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync`. /// /// [box]: ../../std/boxed/struct.Box.html /// [vec]: ../../std/vec/struct.Vec.html /// [cell]: crate::cell::Cell /// [refcell]: crate::cell::RefCell /// [rc]: ../../std/rc/struct.Rc.html /// [arc]: ../../std/sync/struct.Arc.html /// [atomic data types]: crate::sync::atomic /// [mutex]: ../../std/sync/struct.Mutex.html /// [rwlock]: ../../std/sync/struct.RwLock.html /// [unsafecell]: crate::cell::UnsafeCell /// [ub]: ../../reference/behavior-considered-undefined.html /// [transmute]: crate::mem::transmute /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html #[stable(feature =3D "rust1", since =3D "1.0.0")] #[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")] #[lang =3D "sync"] #[rustc_on_unimplemented( on( _Self =3D "core::cell::once::OnceCell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::OnceLock` instead" ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` instea= d", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` instead", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` instea= d", ), on( _Self =3D "core::cell::Cell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` instead= ", ), on( all( _Self =3D "core::cell::Cell", not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell"), not(_Self =3D "core::cell::Cell") ), note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock`", ), on( _Self =3D "core::cell::RefCell", note =3D "if you want to do aliasing and mutation between multiple = threads, use `std::sync::RwLock` instead", ), message =3D "`{Self}` cannot be shared between threads safely", label =3D "`{Self}` cannot be shared between threads safely" )] pub unsafe auto trait Sync { // FIXME(estebank): once support to add notes in `rustc_on_unimplemente= d` // lands in beta, and it has been extended to check whether a closure is // anywhere in the requirement chain, extend it as such (#48534): // ``` // on( // closure, // note=3D"`{Self}` cannot be shared safely, consider marking the c= losure `move`" // ), // ``` // Empty } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl !Sync for *const T {} #[stable(feature =3D "rust1", since =3D "1.0.0")] impl !Sync for *mut T {} /// Zero-sized type used to mark things that "act like" they own a `T`. /// /// Adding a `PhantomData` field to your type tells the compiler that yo= ur /// type acts as though it stores a value of type `T`, even though it doesn= 't /// really. This information is used when computing certain safety properti= es. /// /// For a more in-depth explanation of how to use `PhantomData`, please = see /// [the Nomicon](../../nomicon/phantom-data.html). /// /// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB /// /// Though they both have scary names, `PhantomData` and 'phantom types' are /// related, but not identical. A phantom type parameter is simply a type /// parameter which is never used. In Rust, this often causes the compiler = to /// complain, and the solution is to add a "dummy" use by way of `PhantomDa= ta`. /// /// # Examples /// /// ## Unused lifetime parameters /// /// Perhaps the most common use case for `PhantomData` is a struct that has= an /// unused lifetime parameter, typically as part of some unsafe code. For /// example, here is a struct `Slice` that has two pointers of type `*const= T`, /// presumably pointing into an array somewhere: /// /// ```compile_fail,E0392 /// struct Slice<'a, T> { /// start: *const T, /// end: *const T, /// } /// ``` /// /// The intention is that the underlying data is only valid for the /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this /// intent is not expressed in the code, since there are no uses of /// the lifetime `'a` and hence it is not clear what data it applies /// to. We can correct this by telling the compiler to act *as if* the /// `Slice` struct contained a reference `&'a T`: /// /// ``` /// use std::marker::PhantomData; /// /// # #[allow(dead_code)] /// struct Slice<'a, T> { /// start: *const T, /// end: *const T, /// phantom: PhantomData<&'a T>, /// } /// ``` /// /// This also in turn infers the lifetime bound `T: 'a`, indicating /// that any references in `T` are valid over the lifetime `'a`. /// /// When initializing a `Slice` you simply provide the value /// `PhantomData` for the field `phantom`: /// /// ``` /// # #![allow(dead_code)] /// # use std::marker::PhantomData; /// # struct Slice<'a, T> { /// # start: *const T, /// # end: *const T, /// # phantom: PhantomData<&'a T>, /// # } /// fn borrow_vec(vec: &Vec) -> Slice<'_, T> { /// let ptr =3D vec.as_ptr(); /// Slice { /// start: ptr, /// end: unsafe { ptr.add(vec.len()) }, /// phantom: PhantomData, /// } /// } /// ``` /// /// ## Unused type parameters /// /// It sometimes happens that you have unused type parameters which /// indicate what type of data a struct is "tied" to, even though that /// data is not actually found in the struct itself. Here is an /// example where this arises with [FFI]. The foreign interface uses /// handles of type `*mut ()` to refer to Rust values of different /// types. We track the Rust type using a phantom type parameter on /// the struct `ExternalResource` which wraps a handle. /// /// [FFI]: ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-ca= ll-external-code /// /// ``` /// # #![allow(dead_code)] /// # trait ResType { } /// # struct ParamType; /// # mod foreign_lib { /// # pub fn new(_: usize) -> *mut () { 42 as *mut () } /// # pub fn do_stuff(_: *mut (), _: usize) {} /// # } /// # fn convert_params(_: ParamType) -> usize { 42 } /// use std::marker::PhantomData; /// use std::mem; /// /// struct ExternalResource { /// resource_handle: *mut (), /// resource_type: PhantomData, /// } /// /// impl ExternalResource { /// fn new() -> Self { /// let size_of_res =3D mem::size_of::(); /// Self { /// resource_handle: foreign_lib::new(size_of_res), /// resource_type: PhantomData, /// } /// } /// /// fn do_stuff(&self, param: ParamType) { /// let foreign_params =3D convert_params(param); /// foreign_lib::do_stuff(self.resource_handle, foreign_params); /// } /// } /// ``` /// /// ## Ownership and the drop check /// /// The exact interaction of `PhantomData` with drop check **may change in = the future**. /// /// Currently, adding a field of type `PhantomData` indicates that your = type *owns* data of type /// `T` in very rare circumstances. This in turn has effects on the Rust co= mpiler's [drop check] /// analysis. For the exact rules, see the [drop check] documentation. /// /// ## Layout /// /// For all `T`, the following are guaranteed: /// * `size_of::>() =3D=3D 0` /// * `align_of::>() =3D=3D 1` /// /// [drop check]: Drop#drop-check #[lang =3D "phantom_data"] #[stable(feature =3D "rust1", since =3D "1.0.0")] pub struct PhantomData; #[stable(feature =3D "rust1", since =3D "1.0.0")] impl Hash for PhantomData { #[inline] fn hash(&self, _: &mut H) {} } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl cmp::PartialEq for PhantomData { fn eq(&self, _other: &PhantomData) -> bool { true } } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl cmp::Eq for PhantomData {} #[stable(feature =3D "rust1", since =3D "1.0.0")] impl cmp::PartialOrd for PhantomData { fn partial_cmp(&self, _other: &PhantomData) -> Option= { Option::Some(cmp::Ordering::Equal) } } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl cmp::Ord for PhantomData { fn cmp(&self, _other: &PhantomData) -> cmp::Ordering { cmp::Ordering::Equal } } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl Copy for PhantomData {} #[stable(feature =3D "rust1", since =3D "1.0.0")] impl Clone for PhantomData { fn clone(&self) -> Self { Self } } #[stable(feature =3D "rust1", since =3D "1.0.0")] impl Default for PhantomData { fn default() -> Self { Self } } #[unstable(feature =3D "structural_match", issue =3D "31434")] impl StructuralPartialEq for PhantomData {} /// Compiler-internal trait used to indicate the type of enum discriminants. /// /// This trait is automatically implemented for every type and does not add= any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior** to tr= ansmute /// between `DiscriminantKind::Discriminant` and `mem::Discriminant`. /// /// [`mem::Discriminant`]: crate::mem::Discriminant #[unstable( feature =3D "discriminant_kind", issue =3D "none", reason =3D "this trait is unlikely to ever be stabilized, use `mem::dis= criminant` instead" )] #[lang =3D "discriminant_kind"] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] pub trait DiscriminantKind { /// The type of the discriminant, which must satisfy the trait /// bounds required by `mem::Discriminant`. #[lang =3D "discriminant_type"] type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Send = + Sync + Unpin; } /// Used to determine whether a type contains /// any `UnsafeCell` internally, but not through an indirection. /// This affects, for example, whether a `static` of that type is /// placed in read-only static memory or writable static memory. /// This can be used to declare that a constant with a generic type /// will not contain interior mutability, and subsequently allow /// placing the constant behind references. /// /// # Safety /// /// This trait is a core part of the language, it is just expressed as a tr= ait in libcore for /// convenience. Do *not* implement it for other types. // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl]`. // That requires porting the impls below to native internal impls. #[lang =3D "freeze"] #[unstable(feature =3D "freeze", issue =3D "121675")] pub unsafe auto trait Freeze {} #[unstable(feature =3D "freeze", issue =3D "121675")] impl !Freeze for UnsafeCell {} marker_impls! { #[unstable(feature =3D "freeze", issue =3D "121675")] unsafe Freeze for {T: ?Sized} PhantomData, {T: ?Sized} *const T, {T: ?Sized} *mut T, {T: ?Sized} &T, {T: ?Sized} &mut T, } /// Types that do not require any pinning guarantees. /// /// For information on what "pinning" is, see the [`pin` module] documentat= ion. /// /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is p= inning-agnostic: /// it shall not expose nor rely on any pinning guarantees. This, in turn, = means that a /// `Pin`-wrapped pointer to such a type can feature a *fully unrestricted*= API. /// In other words, if `T: Unpin`, a value of type `T` will *not* be bound = by the invariants /// which pinning otherwise offers, even when "pinned" by a [`Pin`] po= inting at it. /// When a value of type `T` is pointed at by a [`Pin`], [`Pin`] will = not restrict access /// to the pointee value like it normally would, thus allowing the user to = do anything that they /// normally could with a non-[`Pin`]-wrapped `Ptr` to that value. /// /// The idea of this trait is to alleviate the reduced ergonomics of APIs t= hat require the use /// of [`Pin`] for soundness for some types, but which also want to be used= by other types that /// don't care about pinning. The prime example of such an API is [`Future:= :poll`]. There are many /// [`Future`] types that don't care about pinning. These futures can imple= ment `Unpin` and /// therefore get around the pinning related restrictions in the API, while= still allowing the /// subset of [`Future`]s which *do* require pinning to be implemented soun= dly. /// /// For more discussion on the consequences of [`Unpin`] within the wider s= cope of the pinning /// system, see the [section about `Unpin`] in the [`pin` module]. /// /// `Unpin` has no consequence at all for non-pinned data. In particular, [= `mem::replace`] happily /// moves `!Unpin` data, which would be immovable when pinned ([`mem::repla= ce`] works for any /// `&mut T`, not just when `T: Unpin`). /// /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is *p= inned* by being wrapped /// inside a [`Pin`] pointing at it. This is because you cannot (safel= y) use a /// [`Pin`] to get a `&mut T` to its pointee value, which you would ne= ed to call /// [`mem::replace`], and *that* is what makes this system work. /// /// So this, for example, can only be done on types implementing `Unpin`: /// /// ```rust /// # #![allow(unused_must_use)] /// use std::mem; /// use std::pin::Pin; /// /// let mut string =3D "this".to_string(); /// let mut pinned_string =3D Pin::new(&mut string); /// /// // We need a mutable reference to call `mem::replace`. /// // We can obtain such a reference by (implicitly) invoking `Pin::deref_= mut`, /// // but that is only possible because `String` implements `Unpin`. /// mem::replace(&mut *pinned_string, "other".to_string()); /// ``` /// /// This trait is automatically implemented for almost every type. The comp= iler is free /// to take the conservative stance of marking types as [`Unpin`] so long a= s all of the types that /// compose its fields are also [`Unpin`]. This is because if a type implem= ents [`Unpin`], then it /// is unsound for that type's implementation to rely on pinning-related gu= arantees for soundness, /// *even* when viewed through a "pinning" pointer! It is the responsibilit= y of the implementor of /// a type that relies upon pinning for soundness to ensure that type is *n= ot* marked as [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the [`pin` mod= ule] docs. /// /// [`mem::replace`]: crate::mem::replace "mem replace" /// [`Future`]: crate::future::Future "Future" /// [`Future::poll`]: crate::future::Future::poll "Future poll" /// [`Pin`]: crate::pin::Pin "Pin" /// [`Pin`]: crate::pin::Pin "Pin" /// [`pin` module]: crate::pin "pin module" /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpin" /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe" #[stable(feature =3D "pin", since =3D "1.33.0")] #[diagnostic::on_unimplemented( note =3D "consider using the `pin!` macro\nconsider using `Box::pin` if= you need to access the pinned value outside of the current scope", message =3D "`{Self}` cannot be unpinned" )] #[lang =3D "unpin"] pub auto trait Unpin {} /// A marker type which does not implement `Unpin`. /// /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by = default. #[stable(feature =3D "pin", since =3D "1.33.0")] #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] pub struct PhantomPinned; #[stable(feature =3D "pin", since =3D "1.33.0")] impl !Unpin for PhantomPinned {} marker_impls! { #[stable(feature =3D "pin", since =3D "1.33.0")] Unpin for {T: ?Sized} &T, {T: ?Sized} &mut T, } marker_impls! { #[stable(feature =3D "pin_raw", since =3D "1.38.0")] Unpin for {T: ?Sized} *const T, {T: ?Sized} *mut T, } /// A marker for types that can be dropped. /// /// This should be used for `~const` bounds, /// as non-const bounds will always hold for every type. #[unstable(feature =3D "const_destruct", issue =3D "133214")] #[lang =3D "destruct"] #[rustc_on_unimplemented(message =3D "can't drop `{Self}`", append_const_ms= g)] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] #[cfg_attr(not(bootstrap), const_trait)] pub trait Destruct {} /// A marker for tuple types. /// /// The implementation of this trait is built-in and cannot be implemented /// for any user type. #[unstable(feature =3D "tuple_trait", issue =3D "none")] #[lang =3D "tuple_trait"] #[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] pub trait Tuple {} /// A marker for pointer-like types. /// /// This trait can only be implemented for types that are certain to have /// the same size and alignment as a [`usize`] or [`*const ()`](pointer). /// To ensure this, there are special requirements on implementations /// of `PointerLike` (other than the already-provided implementations /// for built-in types): /// /// * The type must have `#[repr(transparent)]`. /// * The type=E2=80=99s sole non-zero-sized field must itself implement `P= ointerLike`. #[unstable(feature =3D "pointer_like_trait", issue =3D "none")] #[lang =3D "pointer_like"] #[diagnostic::on_unimplemented( message =3D "`{Self}` needs to have the same ABI as a pointer", label =3D "`{Self}` needs to be a pointer-like type" )] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] pub trait PointerLike {} #[cfg(not(bootstrap))] marker_impls! { #[unstable(feature =3D "pointer_like_trait", issue =3D "none")] PointerLike for isize, usize, {T} &T, {T} &mut T, {T} *const T, {T} *mut T, {T: PointerLike} crate::pin::Pin, } /// A marker for types which can be used as types of `const` generic parame= ters. /// /// These types must have a proper equivalence relation (`Eq`) and it must = be automatically /// derived (`StructuralPartialEq`). There's a hard-coded check in the comp= iler ensuring /// that all fields are also `ConstParamTy`, which implies that recursively= , all fields /// are `StructuralPartialEq`. #[lang =3D "const_param_ty"] #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a con= st parameter type")] #[allow(multiple_supertrait_upcastable)] // We name this differently than the derive macro so that the `adt_const_pa= rams` can // be used independently of `unsized_const_params` without requiring a full= path // to the derive macro every time it is used. This should be renamed on sta= bilization. pub trait ConstParamTy_: UnsizedConstParamTy + StructuralPartialEq + Eq {} /// Derive macro generating an impl of the trait `ConstParamTy`. #[rustc_builtin_macro] #[allow_internal_unstable(unsized_const_params)] #[unstable(feature =3D "adt_const_params", issue =3D "95174")] pub macro ConstParamTy($item:item) { /* compiler built-in */ } #[lang =3D "unsized_const_param_ty"] #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a con= st parameter type")] /// A marker for types which can be used as types of `const` generic parame= ters. /// /// Equivalent to [`ConstParamTy_`] except that this is used by /// the `unsized_const_params` to allow for fake unstable impls. pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {} /// Derive macro generating an impl of the trait `ConstParamTy`. #[rustc_builtin_macro] #[allow_internal_unstable(unsized_const_params)] #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] pub macro UnsizedConstParamTy($item:item) { /* compiler built-in */ } // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure` marker_impls! { #[unstable(feature =3D "adt_const_params", issue =3D "95174")] ConstParamTy_ for usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, bool, char, (), {T: ConstParamTy_, const N: usize} [T; N], } marker_impls! { #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] UnsizedConstParamTy for usize, u8, u16, u32, u64, u128, isize, i8, i16, i32, i64, i128, bool, char, (), {T: UnsizedConstParamTy, const N: usize} [T; N], str, {T: UnsizedConstParamTy} [T], {T: UnsizedConstParamTy + ?Sized} &T, } /// A common trait implemented by all function pointers. #[unstable( feature =3D "fn_ptr_trait", issue =3D "none", reason =3D "internal trait for implementing various traits for all func= tion pointers" )] #[lang =3D "fn_ptr_trait"] #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D fal= se))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] pub trait FnPtr: Copy + Clone { /// Returns the address of the function pointer. #[lang =3D "fn_ptr_addr"] fn addr(self) -> *const (); } /// Derive macro generating impls of traits related to smart pointers. #[rustc_builtin_macro(CoercePointee, attributes(pointee))] #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)] #[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")] #[cfg(not(bootstrap))] pub macro CoercePointee($item:item) { /* compiler built-in */ } ``` In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121 Repository branch: feature/igc System Description: NixOS 24.11 (Vicuna) Configured using: 'configure 'CFLAGS=3D-O3 -march=3Dnative' --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/featur= e_igc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=3Dyes --with-imagemagick --with-modules --with-pgtk --with-cairo --with-cairo-xcb --without-compress-install --with-mailutils --with-tree-sitter --with-xinput2 --enable-link-time-optimization --with-file-notification=3Dinotify' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB Important settings: value of $LC_COLLATE: C value of $LC_MONETARY: en_US.UTF-8 value of $LC_NUMERIC: en_US.UTF-8 value of $LC_TIME: C value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=3Dfcitx locale-coding-system: utf-8-unix Major mode: Elisp/l Minor modes in effect: restore-point-mode: t global-atomic-chrome-edit-mode: t global-git-gutter-mode: t git-gutter-mode: t marginalia-mode: t elisp-def-mode: t flycheck-posframe-mode: t hungry-delete-mode: t symbol-overlay-mode: t keycast-tab-bar-mode: t vertico-truncate-mode: t vertico-multiform-mode: t vertico-mode: t telega-root-auto-fill-mode: t telega-contact-birthdays-mode: t telega-active-video-chats-mode: t telega-active-locations-mode: t telega-patrons-mode: t telega-active-stories-mode: t tab-line-nerd-icons-global-mode: t global-tab-line-mode: t tab-line-mode: t ultra-scroll-mode: t pixel-scroll-precision-mode: t org-roam-db-autosync-mode: t global-org-modern-mode: t mu4e-modeline-mode: t global-kkp-mode: t global-git-commit-mode: t flycheck-mode: t engine-mode: t symex-mode: t global-evil-surround-mode: t evil-surround-mode: t yas-global-mode: t yas-minor-mode: t corfu-terminal-mode: t corfu-history-mode: t global-corfu-mode: t corfu-mode: t rainbow-mode: t elisp-autofmt-mode: t highlight-defined-mode: t highlight-numbers-mode: t hes-mode: t rainbow-delimiters-mode: t burly-tabs-mode: t global-form-feed-st-mode: t form-feed-st-mode: t eat-eshell-mode: t sly-symbol-completion-mode: t super-save-mode: t savehist-mode: t which-key-mode: t super-hint-xref-mode: t super-hint-rg-mode: t windmove-mode: t server-mode: t save-place-mode: t recentf-mode: t winner-mode: t persistent-scratch-autosave-mode: t global-dash-fontify-mode: t dash-fontify-mode: t nerd-icons-completion-mode: t sudo-edit-indicator-mode: t global-evil-visualstar-mode: t evil-visualstar-mode: t evil-commentary-mode: t global-evil-mc-mode: t evil-mc-mode: t evil-lion-mode: t global-evil-collection-unimpaired-mode: t evil-collection-unimpaired-mode: t buffer-face-mode: t TeX-PDF-mode: t display-line-numbers-mode: t electric-pair-mode: t global-auto-revert-mode: t evil-mode: t evil-local-mode: t general-override-mode: t minions-mode: t el-patch-use-package-mode: t elpaca-use-package-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tab-bar-mode: t file-name-shadow-mode: t context-menu-mode: t global-font-lock-mode: t font-lock-mode: t minibuffer-regexp-mode: t column-number-mode: -1 line-number-mode: -1 transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e= xec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e= xec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides /home/e= xec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5062231e= c5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-loaddefs /home/exec/.emacs.d/elpaca/builds/transient/transient hides /home/exec/Proj= ects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5062231ec5a11c7a= 87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient Features: (shadow sort mail-extr expand-region yaml-mode-expansions subword-mode-expansions text-mode-expansions cc-mode-expansions the-org-mode-expansions python-el-fgallina-expansions latex-mode-expansions js2-mode-expansions js-mode-expansions web-mode-expansions html-mode-expansions clojure-mode-expansions er-basic-expansions expand-region-core expand-region-custom evil-collection-embark embark-org embark-consult embark gptel-curl nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3 lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot copilot-balancer editorconfig editorconfig-core editorconfig-core-handle editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads consult-ag-autoloads restore-point evil-collection-atomic-chrome atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert flycheck-posframe evil-collection-hungry-delete hungry-delete symbol-overlay keycast zig-mode reformatter empv vertico-truncate vertico-posframe vertico-multiform evil-collection-vertico vertico lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words superword subword evil-collection-telega telega-obsolete telega telega-tdlib-events telega-match telega-root telega-info telega-chat telega-modes telega-company telega-emoji telega-user telega-notifications telega-voip telega-msg telega-story telega-webpage telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n telega-sort telega-filter telega-ins telega-inline telega-util telega-folders telega-topic telega-media telega-tdlib telega-server telega-core telega-customize emacsbug tab-line-nerd-icons evil-collection-imenu-list imenu-list tab-line rust-utils rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam org-capture emacsql-sqlite emacsql emacsql-compiler org-journal org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review pr-review-render pr-review-action magit-diff git-commit evil-collection-log-edit log-edit pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process evil-collection-with-editor with-editor magit-mode magit-git magit-base pr-review-input pr-review-api ghub-graphql treepy gsexp ghub pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline lsp-rust lsp-semantic-tokens lsp-mode network-stream evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement ement-room-list taxy-magit-section taxy ement ement-notifications ement-notify ement-room ewoc ement-lib ement-api ement-structs ement-macros dns llm-ollama llm-provider-utils llm-models llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil symex-evil-support symex-hydra symex-transformations symex-transformations-lisp symex-utils evil-cleverparens evil-cleverparens-text-objects evil-cleverparens-util smartparens evil-surround symex-misc symex-interface-builtins symex-interface-fennel symex-interface-arc symex-interface-common-lisp symex-interface-clojure symex-interface-scheme symex-interface-racket symex-interface-elisp symex-interop symex-interface symex-traversals symex-dsl symex-evaluator symex-computations symex-primitives symex-ts symex-utils-ts symex-transformations-ts symex-primitives-lisp symex-data symex-ui symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db elfeed-lib xml-query dired-git-info dired-hacks dired-preview evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu consult-ls-git paredit clojure-ts-mode evil-collection-cider cider tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend cider-find cider-inspector cider-completion cider-profile cider-eval cider-jar cider-repl-history cider-repl cider-resolve cider-test cider-overlays cider-stacktrace cider-doc cider-browse-spec cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common cider-completion-context cider-connection cider-popup sesman-browser nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell chatgpt-shell-prompt-compose chatgpt-shell-perplexity chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly compile-multi form-feed-st google-this echo-bar fcitx evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach org-element org-persist org-id org-refile org-element-ast inline avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode explain-pause-top explain-pause-log-to-socket evil-collection-profiler profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect crux pest-mode popwin modus-themes blackboard-theme standard-themes nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme iscroll xml+ evil-textobj-tree-sitter evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg line-reminder ov ht fringe-helper solarized-theme solarized solarized-faces sqlup-mode evil-collection-bm bm zen-mode evil-collection-sly sly gud sly-completion sly-buttons sly-messages sly-common evil-collection-apropos apropos evil-collection-arc-mode arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme hybrid-reverse-theme material-theme doom-themes doom-themes-base nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme wildcharm-theme atom-one-dark-theme parchment-theme autothemer visual-fill-column transpose-frame gameoflife evil-collection-docker docker docker-context docker-volume docker-network docker-image docker-container docker-faces docker-core docker-compose docker-process docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir dumb-jump evil-collection-popup popup websocket bindat bing-dict cl bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e notifications gntp pinentry evil-collection-hackernews hackernews evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe evil-collection-consult consult clang-format apheleia apheleia-rcs apheleia-dp apheleia-formatters apheleia-utils apheleia-log apheleia-formatter-context vimrc-mode gnuplot olivetti super-save evil-collection-helpful helpful cc-langs trace cl-print evil-collection-edebug edebug evil-collection-debug debug backtrace info-look evil-collection-info info help-fns radix-tree evil-collection-elisp-refs elisp-refs solidity-mode solidity-common evil-collection-git-timemachine git-timemachine web-mode disp-table evil-collection-go-mode go-mode find-file evil-collection-js2-mode js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads org-sliced-images-autoloads consult-org-roam-autoloads org-roam-autoloads org-journal-autoloads org-download-autoloads org-modern-autoloads orderless-autoloads mu4e-autoloads cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads kkp-autoloads rfc-mode-autoloads string-inflection-autoloads wakatime-mode-autoloads webpaste-autoloads systemd-autoloads minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads ement-autoloads taxy-magit-section-autoloads taxy-autoloads embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads plz-event-source-autoloads plz-media-type-autoloads plz-autoloads symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads combobulate-go combobulate-json combobulate-yaml combobulate-css combobulate-js-ts combobulate-python combobulate-html combobulate-toml combobulate-cursor multiple-cursors mc-separate-operations rectangular-region-mode mc-mark-pop mc-edit-lines mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors multiple-cursors-core combobulate-query savehist evil-collection-scheme scheme combobulate-ui combobulate-display let-alist combobulate-ztree combobulate-envelope combobulate-manipulation evil-collection-python python combobulate-procedure combobulate-navigation combobulate-misc combobulate-setup tempo combobulate-interface combobulate-settings combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads cape-autoloads kind-icon-autoloads svg-lib-autoloads corfu-terminal-autoloads popon-autoloads corfu-autoloads copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads paredit-autoloads clojure-ts-mode-autoloads cider-autoloads clojure-mode-autoloads queue-autoloads spinner-autoloads sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads cargo-jump-xref-autoloads breadcrumb-autoloads bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads parseedn-autoloads parseclj-autoloads aidermacs-autoloads mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads form-feed-st-autoloads google-this-autoloads echo-bar-autoloads zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads chatgpt-autoloads polymode-autoloads ox-reveal-autoloads htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads modus-themes-autoloads blackboard-theme-autoloads standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads danneskjold-theme-autoloads srcery-theme-autoloads subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads evil-numbers-autoloads ctable-autoloads color-rg-autoloads line-reminder-autoloads fringe-helper-autoloads ov-autoloads solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads zen-mode-autoloads sly-autoloads expand-region-autoloads highlight-defined-autoloads base16-theme-autoloads idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads organic-green-theme-autoloads inkpot-theme-autoloads github-dark-vscode-theme-autoloads almost-mono-themes-autoloads cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads mindre-theme-autoloads kaolin-themes-autoloads tron-legacy-theme-autoloads wildcharm-theme-autoloads atom-one-dark-theme-autoloads parchment-theme-autoloads autothemer-autoloads visual-fill-column-autoloads transpose-frame-autoloads gameoflife-autoloads docker-autoloads aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads cus-dir-autoloads dumb-jump-autoloads popup-autoloads bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads alarm-clock-autoloads pinentry-autoloads hackernews-autoloads notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads consult-autoloads clang-format-autoloads apheleia-autoloads elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads websocket-autoloads restore-point-autoloads ace-window-autoloads avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads web-mode-autoloads adoc-mode-autoloads go-mode-autoloads js2-mode-autoloads rust-playground-autoloads evil-collection-which-key which-key super-hint-xref super-hint-rg super-hint evil-collection-xref xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src evil-collection-sh-script sh-script executable ob-comint org-pcomplete org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs molecule-mode lsp hyperbole hideshow gptel-manual-complete evil-collection-gptel gptel windmove evil-collection-flycheck flycheck erc erc-backend erc-networks erc-common erc-compat erc-loaddefs evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop frameset server evil-collection-eww eww vtable mule-util url-queue mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf tree-widget winner edit-list refine loop list-utils prompts file-info browse-at-remote f image-roll evil-collection-image image-mode exif toc-mode rst scratch sql evil-collection-view view persistent-scratch exercism persist async-await iter2 generator promise url-http url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm promise-rejection-tracking promise-finally promise-done promise-es6-extensions promise-core async request mailheader mail-utils a indent-bars evil-collection-outline noutline outline mode-line-bell powerthesaurus jeison dash s evil-collection-ripgrep ripgrep evil-collection-wgrep wgrep evil-collection-grep grep evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel evil-collection-bookmark bookmark evil-collection-tablist tablist tablist-filter semantic/wisent/comp semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local find-func cedet libmpdel tq time-stamp posframe esup esup-child benchmark ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store evil-collection-magit-section magit-section cursor-sensor llama nix-log nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver tramp-integration tramp-message tramp-compat shell pcomplete parse-time iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax evil-terminal-cursor-changer evil-visualstar evil-commentary evil-commentary-integration evil-collection-evil-mc evil-mc evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired evil-collection-vc-git evil-collection-tabulated-list evil-collection-tab-bar evil-collection-simple evil-collection-replace evil-collection-process-menu evil-collection-package-menu evil-collection-minibuffer evil-collection-man evil-collection-kmacro evil-collection-indent evil-collection-imenu evil-collection-help evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc evil-collection-elpaca evil-collection-dired evil-collection-diff-mode evil-collection-custom evil-collection-compile evil-collection-comint evil-collection-calendar evil-collection-buff-menu evil-collection annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill kinsoku url-file puny svg dom preview latex latex-flymake flymake project compile text-property-search comint ansi-osc tex-ispell tex-style tex dbus xml crm texmathp auctex display-line-numbers elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads browse-at-remote-autoloads image-roll-autoloads saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads scratch-autoloads persistent-scratch-autoloads exercism-autoloads a-autoloads request-autoloads async-autoloads async-await-autoloads promise-autoloads iter2-autoloads persist-autoloads indent-bars-autoloads rainbow-delimiters-autoloads rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads nerd-icons-dired-autoloads nerd-icons-completion-autoloads nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads toml-mode-autoloads highlight-escape-sequences-autoloads highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads nix-mode-autoloads magit-section-autoloads llama-autoloads sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads s-autoloads devdocs-autoloads mathjax-autoloads evil-terminal-cursor-changer-autoloads evil-surround-autoloads evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads smartscan-autoloads timeout-autoloads ess-autoloads info-colors-autoloads evil-collection-autoloads annalist-autoloads sqlite3-autoloads treebundel-autoloads git-link-autoloads texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell which-func imenu man ansi-color autorevert filenotify cal-menu calendar cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal evil-jumps evil-command-window evil-types evil-search evil-ex evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings comp-run comp-common rx evil-common thingatpt rect evil-vars ring undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads transient pcase format-spec transient-autoloads general memoize sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color minions compat general-autoloads memoize-autoloads color-theme-sanityinc-tomorrow-autoloads minions-autoloads el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc vc-dispatcher cl-extra help-mode elpaca-use-package use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo gtk pgtk lcms2 multi-tty move-toolbar make-network-process tty-child-frames native-compile mps emacs) Memory information: ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0) (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0) (buffers 1000 0)) --=20 From debbugs-submit-bounces@debbugs.gnu.org Sat Apr 19 18:12:55 2025 Received: (at submit) by debbugs.gnu.org; 19 Apr 2025 22:12:55 +0000 Received: from localhost ([127.0.0.1]:39357 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6GQh-0008Cs-I0 for submit@debbugs.gnu.org; Sat, 19 Apr 2025 18:12:55 -0400 Received: from lists.gnu.org ([2001:470:142::17]:38156) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6GQe-0008CT-8k for submit@debbugs.gnu.org; Sat, 19 Apr 2025 18:12:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u6GQX-0004If-8h for bug-gnu-emacs@gnu.org; Sat, 19 Apr 2025 18:12:45 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u6GQR-0005Qn-6A for bug-gnu-emacs@gnu.org; Sat, 19 Apr 2025 18:12:44 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-39ee5ac4321so2827700f8f.1 for ; Sat, 19 Apr 2025 15:12:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745100757; x=1745705557; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=; b=T4g/2AUiwV+cabifIlIWae7nPbo0wcYkeWGGvfVb75es+SR14+LKjNhBldWxS5Xves fQHGqc7OIH236KbkFpH0DnB6onyIUwANOaamsEie2qY2cmPiZuE3QnujC6PNca8yWOMQ fdm89lFD1D/SjHvwf8/SXD8fFW9iqWEfPvyiLc7tdacyon4linhpOeU4ueb9xpRIZ+Ey 2Eq4nnvU8CxpOeM5yQlc+1/XJASy+bi8+neRArB2OhBPqSVo6FKp+zZ8EU+KRlA93/Ay 1iMdPtnpV2kleNvxNpGK6w13Dx/ZJz4q2DBgFMjORC7hdRQGzjkYtL/KVR2N0UbuLO+h g1Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745100757; x=1745705557; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Cfjef2cNr8xZm1ZCRg1Jc2y8wUz4ws57nwmTuGnOroc=; b=BasXhxHpVVWO5jg9PxMolqHsyxNMdZ7jyRz/1fjCB67A1amLq7wAoKoo9INKvK45q0 TZeYUHiXF2aC4Q2zv0WQh7A4QyNLfLb1h/0N2xZoxCtcVkxzgJUew6M/WVc4VS/JobQ9 +/j4VVMYLSno5x/Q8bXPg31NcR3o817zN5rwrgaVJHqES/G+Ct/lRAOJF+PjhnNUWydS +szDQSZm5cIac5Klt7rR1f/AZJAbmirX8E411pGsdf+NdHfFeFa8+y8XHzvrLDYF75g+ eRLHoy80+mu69PAJV4W8uJHQHTuXsiGSSDepgDLGo+vb/CezU4Vo3lbkcHokT+43OP8N Ogdw== X-Forwarded-Encrypted: i=1; AJvYcCVBXcbo5hczeB95wkmQ5sOxXAl0fUb5Cq/mWxTiZju4xkPshEuV+PnIxP5deXa0igbAbz3z61WQ3QqXQgS7@gnu.org X-Gm-Message-State: AOJu0YyFuht2DOMq4VJYIzWGo4sJEfGXqkdBb8u0c+ez6brCIu40olXa cyxVvwCglOgYf0BEdUi4C4uQd5LLwT2ew17+EHwaT69TCzYI5nbbie+0IrFi X-Gm-Gg: ASbGncu7uyu8cuIM3aCARRGOTmACWi4SpnhkVXE3ja5gz5EzE6WDYFZpQkD9F6OqXZY qfRyyXKCfbVp0qql36SLtz1M+j/GpU7UwFv2omZD62uhw0ZTHizK1fQCTdmyCGn35cRpDLJbo5l 1mEdoVzJmXQvS7FcQzRELd3f4RNSeE0w9kc6cZXw0RdW2KfX57SXNdMK0F4a3o/DBJmpZoQd4tr WUjI+BGuvW7MM3DetwPlHVhspig9o7h1Kb0nQ/jD+AW4HxB++89HlJ5+517oYtfaDwUWN2BmObD OUsT2bE9zwnfQhJa4T2gJ2BHIzt9/URmy5cimJzdl31G2BDX/31m1n/mp5NjVxL2MsK7hFXjOb9 i+SWx X-Google-Smtp-Source: AGHT+IGzMHwHOvioJA8gXkxl12+5AGYU+O3CI5kiP7q8CftvOk0MwXCYF2cCviePsodM1DHQXak2DA== X-Received: by 2002:a05:6000:2509:b0:39e:e75b:5cd with SMTP id ffacd0b85a97d-39efba2c98emr5983715f8f.3.1745100756515; Sat, 19 Apr 2025 15:12:36 -0700 (PDT) Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it. [2.230.139.124]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-44044508a7dsm91161305e9.1.2025.04.19.15.12.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Apr 2025 15:12:35 -0700 (PDT) From: Vincenzo Pupillo To: 77914@debbugs.gnu.org, bug-gnu-emacs@gnu.org Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color Date: Sun, 20 Apr 2025 00:12:34 +0200 Message-ID: <3523927.LZWGnKmheA@fedora> In-Reply-To: <877c3gka72.fsf@gmail.com> References: <877c3gka72.fsf@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart7128439.9J7NaK4W3v" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=v.pupillo@gmail.com; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit Cc: Eval Exec X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --nextPart7128439.9J7NaK4W3v Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If the attached file is correct, it appears to be a grammar bug (the tree- sitter-rust grammar). Take a look at the attached screenshot (libtree- sitter-0.25.2 and tree-sitter-rust v0.24.0) Vincenzo In data sabato 19 aprile 2025 07:10:57 Ora legale dell=E2=80=99Europa centr= ale, Eval=20 Exec ha scritto: > Hello, > I'm visiting a rust file, when I set treesit-font-lock-level to 3, all > color are good, when I set treesit-font-lock-level to 4, all color as > lost. > To reproduce this: use this rust file: >=20 > Then eval: > 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost. >=20 > 2. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > colors are good. >=20 > 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost again. >=20 >=20 > ```rust >=20 > //! Primitive traits and types representing basic properties of types. > //! > //! Rust types can be classified in various useful ways according to > //! their intrinsic properties. These classifications are represented > //! as traits. >=20 > #![stable(feature =3D "rust1", since =3D "1.0.0")] >=20 > use crate::cell::UnsafeCell; > use crate::cmp; > use crate::fmt::Debug; > use crate::hash::{Hash, Hasher}; >=20 > /// Implements a given marker trait for multiple types at the same time. > /// > /// The basic syntax looks like this: > /// ```ignore private macro > /// marker_impls! { MarkerTrait for u8, i8 } > /// ``` > /// You can also implement `unsafe` traits > /// ```ignore private macro > /// marker_impls! { unsafe MarkerTrait for u8, i8 } > /// ``` > /// Add attributes to all impls: > /// ```ignore private macro > /// marker_impls! { > /// #[allow(lint)] > /// #[unstable(feature =3D "marker_trait", issue =3D "none")] > /// MarkerTrait for u8, i8 > /// } > /// ``` > /// And use generics: > /// ```ignore private macro > /// marker_impls! { > /// MarkerTrait for > /// u8, i8, > /// {T: ?Sized} *const T, > /// {T: ?Sized} *mut T, > /// {T: MarkerTrait} PhantomData, > /// u32, > /// } > /// ``` > #[unstable(feature =3D "internal_impls_macro", issue =3D "none")] > // Allow implementations of `UnsizedConstParamTy` even though std cannot = use > that feature. #[allow_internal_unstable(unsized_const_params)] > macro marker_impls { > ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, > $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait f= or > $T {} > marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? } > }, > ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {}, >=20 > ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T= :ty > $(, $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* unsafe impl< $($($bounds)*)?= > > $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for > $($($rest)*)? } }, > ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {}, > } >=20 > /// Types that can be transferred across thread boundaries. > /// > /// This trait is automatically implemented when the compiler determines > it's /// appropriate. > /// > /// An example of a non-`Send` type is the reference-counting pointer > /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point = to > the same /// reference-counted value, they might try to update the > reference count at the /// same time, which is [undefined behavior][ub] > because [`Rc`] doesn't use atomic /// operations. Its cousin > [`sync::Arc`][arc] does use atomic operations (incurring /// some overhea= d) > and thus is `Send`. > /// > /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`] > trait for more details. /// > /// [`Rc`]: ../../std/rc/struct.Rc.html > /// [arc]: ../../std/sync/struct.Arc.html > /// [ub]: ../../reference/behavior-considered-undefined.html > #[stable(feature =3D "rust1", since =3D "1.0.0")] > #[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")] > #[diagnostic::on_unimplemented( > message =3D "`{Self}` cannot be sent between threads safely", > label =3D "`{Self}` cannot be sent between threads safely" > )] > pub unsafe auto trait Send { > // empty. > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl !Send for *const T {} > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl !Send for *mut T {} >=20 > // Most instances arise automatically, but this instance is needed to link > up `T: Sync` with // `&T: Send` (and it also removes the unsound default > instance `T Send` -> `&T: Send` that would // otherwise exist). > #[stable(feature =3D "rust1", since =3D "1.0.0")] > unsafe impl Send for &T {} >=20 > /// Types with a constant size known at compile time. > /// > /// All type parameters have an implicit bound of `Sized`. The special > syntax /// `?Sized` can be used to remove this bound if it's not > appropriate. /// > /// ``` > /// # #![allow(dead_code)] > /// struct Foo(T); > /// struct Bar(T); > /// > /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for > [i32] /// struct BarUse(Bar<[i32]>); // OK > /// ``` > /// > /// The one exception is the implicit `Self` type of a trait. A trait does > not /// have an implicit `Sized` bound as this is incompatible with [trait > object]s /// where, by definition, the trait needs to work with all > possible implementors, /// and thus could be any size. > /// > /// Although Rust will let you bind `Sized` to a trait, you won't > /// be able to use it to form a trait object later: > /// > /// ``` > /// # #![allow(unused_variables)] > /// trait Foo { } > /// trait Bar: Sized { } > /// > /// struct Impl; > /// impl Foo for Impl { } > /// impl Bar for Impl { } > /// > /// let x: &dyn Foo =3D &Impl; // OK > /// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot > /// // be made into an object > /// ``` > /// > /// [trait object]: ../../book/ch17-02-trait-objects.html > #[doc(alias =3D "?", alias =3D "?Sized")] > #[stable(feature =3D "rust1", since =3D "1.0.0")] > #[lang =3D "sized"] > #[diagnostic::on_unimplemented( > message =3D "the size for values of type `{Self}` cannot be known at > compilation time", label =3D "doesn't have a size known at compile-time" > )] > #[fundamental] // for Default, for example, which requires that `[T]: > !Default` be evaluatable #[rustc_specialization_trait] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > #[rustc_coinductive] > pub trait Sized { > // Empty. > } >=20 > /// Types that can be "unsized" to a dynamically-sized type. > /// > /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>` > and /// `Unsize`. > /// > /// All implementations of `Unsize` are provided automatically by the > compiler. /// Those implementations are: > /// > /// - Arrays `[T; N]` implement `Unsize<[T]>`. > /// - A type implements `Unsize` if all of these conditio= ns > are met: /// - The type implements `Trait`. > /// - `Trait` is dyn-compatible[^1]. > /// - The type is sized. > /// - The type outlives `'a`. > /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize ..., Un, ...>>` /// where any number of (type and const) parameters may be > changed if all of these conditions /// are met: > /// - Only the last field of `Foo` has a type involving the parameters > `T1`, ..., `Tn`. /// - All other parameters of the struct are equal. > /// - `Field: Unsize>`, where `Field<..= =2E>` > stands for the actual /// type of the struct's last field. > /// > /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow > /// "user-defined" containers such as [`Rc`] to contain dynamically-sized > /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on > coercion][nomicon-coerce] /// for more details. > /// > /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized > /// [`Rc`]: ../../std/rc/struct.Rc.html > /// [RFC982]: > https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md /= // > [nomicon-coerce]: ../../nomicon/coercions.html > /// [^1]: Formerly known as *object safe*. > #[unstable(feature =3D "unsize", issue =3D "18598")] > #[lang =3D "unsize"] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > pub trait Unsize { > // Empty. > } >=20 > /// Required trait for constants used in pattern matches. > /// > /// Any type that derives `PartialEq` automatically implements this trait, > /// *regardless* of whether its type-parameters implement `PartialEq`. > /// > /// If a `const` item contains some type that does not implement this tra= it, > /// then that type either (1.) does not implement `PartialEq` (which means > the /// constant will not provide that comparison method, which code > generation /// assumes is available), or (2.) it implements *its own* > version of /// `PartialEq` (which we assume does not conform to a > structural-equality /// comparison). > /// > /// In either of the two scenarios above, we reject usage of such a const= ant > in /// a pattern match. > /// > /// See also the [structural match RFC][RFC1445], and [issue 63438] which > /// motivated migrating from an attribute-based design to this trait. > /// > /// [RFC1445]: > https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constant= s-> in-patterns.md /// [issue 63438]: > https://github.com/rust-lang/rust/issues/63438 > #[unstable(feature =3D "structural_match", issue =3D "31434")] > #[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not > `#[derive(PartialEq)]`")] #[lang =3D "structural_peq"] > pub trait StructuralPartialEq { > // Empty. > } >=20 > marker_impls! { > #[unstable(feature =3D "structural_match", issue =3D "31434")] > StructuralPartialEq for > usize, u8, u16, u32, u64, u128, > isize, i8, i16, i32, i64, i128, > bool, > char, > str /* Technically requires `[u8]: StructuralPartialEq` */, > (), > {T, const N: usize} [T; N], > {T} [T], > {T: ?Sized} &T, > } >=20 > /// Types whose values can be duplicated simply by copying bits. > /// > /// By default, variable bindings have 'move semantics.' In other > /// words: > /// > /// ``` > /// #[derive(Debug)] > /// struct Foo; > /// > /// let x =3D Foo; > /// > /// let y =3D x; > /// > /// // `x` has moved into `y`, and so cannot be used > /// > /// // println!("{x:?}"); // error: use of moved value > /// ``` > /// > /// However, if a type implements `Copy`, it instead has 'copy semantics': > /// > /// ``` > /// // We can derive a `Copy` implementation. `Clone` is also required, as > it's /// // a supertrait of `Copy`. > /// #[derive(Debug, Copy, Clone)] > /// struct Foo; > /// > /// let x =3D Foo; > /// > /// let y =3D x; > /// > /// // `y` is a copy of `x` > /// > /// println!("{x:?}"); // A-OK! > /// ``` > /// > /// It's important to note that in these two examples, the only difference > is whether you /// are allowed to access `x` after the assignment. Under > the hood, both a copy and a move /// can result in bits being copied in > memory, although this is sometimes optimized away. /// > /// ## How can I implement `Copy`? > /// > /// There are two ways to implement `Copy` on your type. The simplest is = to > use `derive`: /// > /// ``` > /// #[derive(Copy, Clone)] > /// struct MyStruct; > /// ``` > /// > /// You can also implement `Copy` and `Clone` manually: > /// > /// ``` > /// struct MyStruct; > /// > /// impl Copy for MyStruct { } > /// > /// impl Clone for MyStruct { > /// fn clone(&self) -> MyStruct { > /// *self > /// } > /// } > /// ``` > /// > /// There is a small difference between the two. The `derive` strategy wi= ll > also place a `Copy` /// bound on type parameters: > /// > /// ``` > /// #[derive(Clone)] > /// struct MyStruct(T); > /// > /// impl Copy for MyStruct { } > /// ``` > /// > /// This isn't always desired. For example, shared references (`&T`) can = be > copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct > containing markers such as [`PhantomData`] /// could potentially be > duplicated with a bit-wise copy. > /// > /// ## What's the difference between `Copy` and `Clone`? > /// > /// Copies happen implicitly, for example as part of an assignment `y =3D= x`. > The behavior of /// `Copy` is not overloadable; it is always a simple > bit-wise copy. /// > /// Cloning is an explicit action, `x.clone()`. The implementation of > [`Clone`] can /// provide any type-specific behavior necessary to duplica= te > values safely. For example, /// the implementation of [`Clone`] for > [`String`] needs to copy the pointed-to string /// buffer in the heap. A > simple bitwise copy of [`String`] values would merely copy the /// pointe= r, > leading to a double free down the line. For this reason, [`String`] is > [`Clone`] /// but not `Copy`. > /// > /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` mu= st > also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`] > implementation only needs to return `*self` /// (see the example above). > /// > /// ## When can my type be `Copy`? > /// > /// A type can implement `Copy` if all of its components implement `Copy`. > For example, this /// struct can be `Copy`: > /// > /// ``` > /// # #[allow(dead_code)] > /// #[derive(Copy, Clone)] > /// struct Point { > /// x: i32, > /// y: i32, > /// } > /// ``` > /// > /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is > eligible to be `Copy`. /// By contrast, consider > /// > /// ``` > /// # #![allow(dead_code)] > /// # struct Point; > /// struct PointList { > /// points: Vec, > /// } > /// ``` > /// > /// The struct `PointList` cannot implement `Copy`, because [`Vec`] is > not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get > an error: /// > /// ```text > /// the trait `Copy` cannot be implemented for this type; field `points` > does not implement `Copy` /// ``` > /// > /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, ev= en > when it holds /// shared references of types `T` that are *not* `Copy`. > Consider the following struct, /// which can implement `Copy`, because it > only holds a *shared reference* to our non-`Copy` /// type `PointList` fr= om > above: > /// > /// ``` > /// # #![allow(dead_code)] > /// # struct PointList; > /// #[derive(Copy, Clone)] > /// struct PointListWrapper<'a> { > /// point_list_ref: &'a PointList, > /// } > /// ``` > /// > /// ## When *can't* my type be `Copy`? > /// > /// Some types can't be copied safely. For example, copying `&mut T` would > create an aliased /// mutable reference. Copying [`String`] would duplica= te > responsibility for managing the /// [`String`]'s buffer, leading to a > double free. > /// > /// Generalizing the latter case, any type implementing [`Drop`] can't be > `Copy`, because it's /// managing some resource besides its own > [`size_of::`] bytes. /// > /// If you try to implement `Copy` on a struct or enum containing non-`Co= py` > data, you will get /// the error [E0204]. > /// > /// [E0204]: ../../error_codes/E0204.html > /// > /// ## When *should* my type be `Copy`? > /// > /// Generally speaking, if your type _can_ implement `Copy`, it should. K= eep > in mind, though, /// that implementing `Copy` is part of the public API of > your type. If the type might become /// non-`Copy` in the future, it could > be prudent to omit the `Copy` implementation now, to /// avoid a breaking > API change. > /// > /// ## Additional implementors > /// > /// In addition to the [implementors listed below][impls], > /// the following types also implement `Copy`: > /// > /// * Function item types (i.e., the distinct types defined for each > function) /// * Function pointer types (e.g., `fn() -> i32`) > /// * Closure types, if they capture no value from the environment > /// or if all such captured values implement `Copy` themselves. > /// Note that variables captured by shared reference always implement > `Copy` /// (even if the referent doesn't), > /// while variables captured by mutable reference never implement `Copy= `. > /// > /// [`Vec`]: ../../std/vec/struct.Vec.html > /// [`String`]: ../../std/string/struct.String.html > /// [`size_of::`]: crate::mem::size_of > /// [impls]: #implementors > #[stable(feature =3D "rust1", since =3D "1.0.0")] > #[lang =3D "copy"] > // FIXME(matthewjasper) This allows copying a type that doesn't implement > // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when on= ly > // `A<'static>: Copy` and `A<'_>: Clone`). > // We have this attribute here for now only because there are quite a few > // existing specializations on `Copy` that already exist in the standard > // library, and there's no way to safely have this behavior right now. > #[rustc_unsafe_specialization_marker] > #[rustc_diagnostic_item =3D "Copy"] > pub trait Copy: Clone { > // Empty. > } >=20 > /// Derive macro generating an impl of the trait `Copy`. > #[rustc_builtin_macro] > #[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")] > #[allow_internal_unstable(core_intrinsics, derive_clone_copy)] > pub macro Copy($item:item) { > /* compiler built-in */ > } >=20 > // Implementations of `Copy` for primitive types. > // > // Implementations that cannot be described in Rust > // are implemented in `traits::SelectionContext::copy_clone_conditions()` > // in `rustc_trait_selection`. > marker_impls! { > #[stable(feature =3D "rust1", since =3D "1.0.0")] > Copy for > usize, u8, u16, u32, u64, u128, > isize, i8, i16, i32, i64, i128, > f16, f32, f64, f128, > bool, char, > {T: ?Sized} *const T, > {T: ?Sized} *mut T, >=20 > } >=20 > #[unstable(feature =3D "never_type", issue =3D "35121")] > impl Copy for ! {} >=20 > /// Shared references can be copied, but mutable references *cannot*! > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl Copy for &T {} >=20 > /// Types for which it is safe to share references between threads. > /// > /// This trait is automatically implemented when the compiler determines > /// it's appropriate. > /// > /// The precise definition is: a type `T` is [`Sync`] if and only if `&T`= is > /// [`Send`]. In other words, if there is no possibility of > /// [undefined behavior][ub] (including data races) when passing > /// `&T` references between threads. > /// > /// As one would expect, primitive types like [`u8`] and [`f64`] > /// are all [`Sync`], and so are simple aggregate types containing them, > /// like tuples, structs and enums. More examples of basic [`Sync`] > /// types include "immutable" types like `&T`, and those with simple > /// inherited mutability, such as [`Box`][box], [`Vec`][vec] and > /// most other collection types. (Generic parameters need to be [`Sync`] > /// for their container to be [`Sync`].) > /// > /// A somewhat surprising consequence of the definition is that `&mut T` > /// is `Sync` (if `T` is `Sync`) even though it seems like that might > /// provide unsynchronized mutation. The trick is that a mutable > /// reference behind a shared reference (that is, `& &mut T`) > /// becomes read-only, as if it were a `& &T`. Hence there is no risk > /// of a data race. > /// > /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing: > /// * `&T` is [`Send`] if and only if `T` is [`Sync`] > /// * `&mut T` is [`Send`] if and only if `T` is [`Send`] > /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`] > /// > /// Types that are not `Sync` are those that have "interior > /// mutability" in a non-thread-safe form, such as [`Cell`][cell] > /// and [`RefCell`][refcell]. These types allow for mutation of > /// their contents even through an immutable, shared reference. For > /// example the `set` method on [`Cell`][cell] takes `&self`, so it > requires /// only a shared reference [`&Cell`][cell]. The method > performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`. > /// > /// Another example of a non-`Sync` type is the reference-counting > /// pointer [`Rc`][rc]. Given any reference [`&Rc`][rc], you can clone > /// a new [`Rc`][rc], modifying the reference counts in a non-atomic w= ay. > /// > /// For cases when one does need thread-safe interior mutability, > /// Rust provides [atomic data types], as well as explicit locking via > /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types > /// ensure that any mutation cannot cause data races, hence the types > /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe > /// analogue of [`Rc`][rc]. > /// > /// Any types with interior mutability must also use the > /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which > /// can be mutated through a shared reference. Failing to doing this is > /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing > /// from `&T` to `&mut T` is invalid. > /// > /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync= `. > /// > /// [box]: ../../std/boxed/struct.Box.html > /// [vec]: ../../std/vec/struct.Vec.html > /// [cell]: crate::cell::Cell > /// [refcell]: crate::cell::RefCell > /// [rc]: ../../std/rc/struct.Rc.html > /// [arc]: ../../std/sync/struct.Arc.html > /// [atomic data types]: crate::sync::atomic > /// [mutex]: ../../std/sync/struct.Mutex.html > /// [rwlock]: ../../std/sync/struct.RwLock.html > /// [unsafecell]: crate::cell::UnsafeCell > /// [ub]: ../../reference/behavior-considered-undefined.html > /// [transmute]: crate::mem::transmute > /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html > #[stable(feature =3D "rust1", since =3D "1.0.0")] > #[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")] > #[lang =3D "sync"] > #[rustc_on_unimplemented( > on( > _Self =3D "core::cell::once::OnceCell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::OnceLock` instead" ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead= ", > ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead= ", > ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` > instead", ), > on( > _Self =3D "core::cell::Cell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` > instead", ), > on( > all( > _Self =3D "core::cell::Cell", > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell"), > not(_Self =3D "core::cell::Cell") > ), > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock`", ), > on( > _Self =3D "core::cell::RefCell", > note =3D "if you want to do aliasing and mutation between multiple > threads, use `std::sync::RwLock` instead", ), > message =3D "`{Self}` cannot be shared between threads safely", > label =3D "`{Self}` cannot be shared between threads safely" > )] > pub unsafe auto trait Sync { > // FIXME(estebank): once support to add notes in > `rustc_on_unimplemented` // lands in beta, and it has been extended to > check whether a closure is // anywhere in the requirement chain, extend it > as such (#48534): // ``` > // on( > // closure, > // note=3D"`{Self}` cannot be shared safely, consider marking the > closure `move`" // ), > // ``` >=20 > // Empty > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl !Sync for *const T {} > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl !Sync for *mut T {} >=20 > /// Zero-sized type used to mark things that "act like" they own a `T`. > /// > /// Adding a `PhantomData` field to your type tells the compiler that > your /// type acts as though it stores a value of type `T`, even though it > doesn't /// really. This information is used when computing certain safety > properties. /// > /// For a more in-depth explanation of how to use `PhantomData`, please > see /// [the Nomicon](../../nomicon/phantom-data.html). > /// > /// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB > /// > /// Though they both have scary names, `PhantomData` and 'phantom types' = are > /// related, but not identical. A phantom type parameter is simply a type > /// parameter which is never used. In Rust, this often causes the compiler > to /// complain, and the solution is to add a "dummy" use by way of > `PhantomData`. /// > /// # Examples > /// > /// ## Unused lifetime parameters > /// > /// Perhaps the most common use case for `PhantomData` is a struct that h= as > an /// unused lifetime parameter, typically as part of some unsafe code. > For /// example, here is a struct `Slice` that has two pointers of type > `*const T`, /// presumably pointing into an array somewhere: > /// > /// ```compile_fail,E0392 > /// struct Slice<'a, T> { > /// start: *const T, > /// end: *const T, > /// } > /// ``` > /// > /// The intention is that the underlying data is only valid for the > /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this > /// intent is not expressed in the code, since there are no uses of > /// the lifetime `'a` and hence it is not clear what data it applies > /// to. We can correct this by telling the compiler to act *as if* the > /// `Slice` struct contained a reference `&'a T`: > /// > /// ``` > /// use std::marker::PhantomData; > /// > /// # #[allow(dead_code)] > /// struct Slice<'a, T> { > /// start: *const T, > /// end: *const T, > /// phantom: PhantomData<&'a T>, > /// } > /// ``` > /// > /// This also in turn infers the lifetime bound `T: 'a`, indicating > /// that any references in `T` are valid over the lifetime `'a`. > /// > /// When initializing a `Slice` you simply provide the value > /// `PhantomData` for the field `phantom`: > /// > /// ``` > /// # #![allow(dead_code)] > /// # use std::marker::PhantomData; > /// # struct Slice<'a, T> { > /// # start: *const T, > /// # end: *const T, > /// # phantom: PhantomData<&'a T>, > /// # } > /// fn borrow_vec(vec: &Vec) -> Slice<'_, T> { > /// let ptr =3D vec.as_ptr(); > /// Slice { > /// start: ptr, > /// end: unsafe { ptr.add(vec.len()) }, > /// phantom: PhantomData, > /// } > /// } > /// ``` > /// > /// ## Unused type parameters > /// > /// It sometimes happens that you have unused type parameters which > /// indicate what type of data a struct is "tied" to, even though that > /// data is not actually found in the struct itself. Here is an > /// example where this arises with [FFI]. The foreign interface uses > /// handles of type `*mut ()` to refer to Rust values of different > /// types. We track the Rust type using a phantom type parameter on > /// the struct `ExternalResource` which wraps a handle. > /// > /// [FFI]: > ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-extern= al > -code /// > /// ``` > /// # #![allow(dead_code)] > /// # trait ResType { } > /// # struct ParamType; > /// # mod foreign_lib { > /// # pub fn new(_: usize) -> *mut () { 42 as *mut () } > /// # pub fn do_stuff(_: *mut (), _: usize) {} > /// # } > /// # fn convert_params(_: ParamType) -> usize { 42 } > /// use std::marker::PhantomData; > /// use std::mem; > /// > /// struct ExternalResource { > /// resource_handle: *mut (), > /// resource_type: PhantomData, > /// } > /// > /// impl ExternalResource { > /// fn new() -> Self { > /// let size_of_res =3D mem::size_of::(); > /// Self { > /// resource_handle: foreign_lib::new(size_of_res), > /// resource_type: PhantomData, > /// } > /// } > /// > /// fn do_stuff(&self, param: ParamType) { > /// let foreign_params =3D convert_params(param); > /// foreign_lib::do_stuff(self.resource_handle, foreign_params); > /// } > /// } > /// ``` > /// > /// ## Ownership and the drop check > /// > /// The exact interaction of `PhantomData` with drop check **may change in > the future**. /// > /// Currently, adding a field of type `PhantomData` indicates that your > type *owns* data of type /// `T` in very rare circumstances. This in turn > has effects on the Rust compiler's [drop check] /// analysis. For the exa= ct > rules, see the [drop check] documentation. /// > /// ## Layout > /// > /// For all `T`, the following are guaranteed: > /// * `size_of::>() =3D=3D 0` > /// * `align_of::>() =3D=3D 1` > /// > /// [drop check]: Drop#drop-check > #[lang =3D "phantom_data"] > #[stable(feature =3D "rust1", since =3D "1.0.0")] > pub struct PhantomData; >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl Hash for PhantomData { > #[inline] > fn hash(&self, _: &mut H) {} > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl cmp::PartialEq for PhantomData { > fn eq(&self, _other: &PhantomData) -> bool { > true > } > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl cmp::Eq for PhantomData {} >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl cmp::PartialOrd for PhantomData { > fn partial_cmp(&self, _other: &PhantomData) -> Option > { Option::Some(cmp::Ordering::Equal) > } > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl cmp::Ord for PhantomData { > fn cmp(&self, _other: &PhantomData) -> cmp::Ordering { > cmp::Ordering::Equal > } > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl Copy for PhantomData {} >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl Clone for PhantomData { > fn clone(&self) -> Self { > Self > } > } >=20 > #[stable(feature =3D "rust1", since =3D "1.0.0")] > impl Default for PhantomData { > fn default() -> Self { > Self > } > } >=20 > #[unstable(feature =3D "structural_match", issue =3D "31434")] > impl StructuralPartialEq for PhantomData {} >=20 > /// Compiler-internal trait used to indicate the type of enum discriminan= ts. > /// > /// This trait is automatically implemented for every type and does not a= dd > any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior** > to transmute /// between `DiscriminantKind::Discriminant` and > `mem::Discriminant`. /// > /// [`mem::Discriminant`]: crate::mem::Discriminant > #[unstable( > feature =3D "discriminant_kind", > issue =3D "none", > reason =3D "this trait is unlikely to ever be stabilized, use > `mem::discriminant` instead" )] > #[lang =3D "discriminant_kind"] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > pub trait DiscriminantKind { > /// The type of the discriminant, which must satisfy the trait > /// bounds required by `mem::Discriminant`. > #[lang =3D "discriminant_type"] > type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Sen= d + > Sync + Unpin; } >=20 > /// Used to determine whether a type contains > /// any `UnsafeCell` internally, but not through an indirection. > /// This affects, for example, whether a `static` of that type is > /// placed in read-only static memory or writable static memory. > /// This can be used to declare that a constant with a generic type > /// will not contain interior mutability, and subsequently allow > /// placing the constant behind references. > /// > /// # Safety > /// > /// This trait is a core part of the language, it is just expressed as a > trait in libcore for /// convenience. Do *not* implement it for other > types. > // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl= ]`. > // That requires porting the impls below to native internal impls. #[lang= =3D > "freeze"] > #[unstable(feature =3D "freeze", issue =3D "121675")] > pub unsafe auto trait Freeze {} >=20 > #[unstable(feature =3D "freeze", issue =3D "121675")] > impl !Freeze for UnsafeCell {} > marker_impls! { > #[unstable(feature =3D "freeze", issue =3D "121675")] > unsafe Freeze for > {T: ?Sized} PhantomData, > {T: ?Sized} *const T, > {T: ?Sized} *mut T, > {T: ?Sized} &T, > {T: ?Sized} &mut T, > } >=20 > /// Types that do not require any pinning guarantees. > /// > /// For information on what "pinning" is, see the [`pin` module] > documentation. /// > /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is > pinning-agnostic: /// it shall not expose nor rely on any pinning > guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such= a > type can feature a *fully unrestricted* API. /// In other words, if `T: > Unpin`, a value of type `T` will *not* be bound by the invariants /// whi= ch > pinning otherwise offers, even when "pinned" by a [`Pin`] pointing at > it. /// When a value of type `T` is pointed at by a [`Pin`], [`Pin`] > will not restrict access /// to the pointee value like it normally would, > thus allowing the user to do anything that they /// normally could with a > non-[`Pin`]-wrapped `Ptr` to that value. /// > /// The idea of this trait is to alleviate the reduced ergonomics of APIs > that require the use /// of [`Pin`] for soundness for some types, but whi= ch > also want to be used by other types that /// don't care about pinning. The > prime example of such an API is [`Future::poll`]. There are many /// > [`Future`] types that don't care about pinning. These futures can impleme= nt > `Unpin` and /// therefore get around the pinning related restrictions in > the API, while still allowing the /// subset of [`Future`]s which *do* > require pinning to be implemented soundly. /// > /// For more discussion on the consequences of [`Unpin`] within the wider > scope of the pinning /// system, see the [section about `Unpin`] in the > [`pin` module]. /// > /// `Unpin` has no consequence at all for non-pinned data. In particular, > [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable > when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `= T: > Unpin`). > /// > /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is > *pinned* by being wrapped /// inside a [`Pin`] pointing at it. This = is > because you cannot (safely) use a /// [`Pin`] to get a `&mut T` to i= ts > pointee value, which you would need to call /// [`mem::replace`], and > *that* is what makes this system work. > /// > /// So this, for example, can only be done on types implementing `Unpin`: > /// > /// ```rust > /// # #![allow(unused_must_use)] > /// use std::mem; > /// use std::pin::Pin; > /// > /// let mut string =3D "this".to_string(); > /// let mut pinned_string =3D Pin::new(&mut string); > /// > /// // We need a mutable reference to call `mem::replace`. > /// // We can obtain such a reference by (implicitly) invoking > `Pin::deref_mut`, /// // but that is only possible because `String` > implements `Unpin`. /// mem::replace(&mut *pinned_string, > "other".to_string()); > /// ``` > /// > /// This trait is automatically implemented for almost every type. The > compiler is free /// to take the conservative stance of marking types as > [`Unpin`] so long as all of the types that /// compose its fields are also > [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is > unsound for that type's implementation to rely on pinning-related > guarantees for soundness, /// *even* when viewed through a "pinning" > pointer! It is the responsibility of the implementor of /// a type that > relies upon pinning for soundness to ensure that type is *not* marked as > [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the > [`pin` module] docs. /// > /// [`mem::replace`]: crate::mem::replace "mem replace" > /// [`Future`]: crate::future::Future "Future" > /// [`Future::poll`]: crate::future::Future::poll "Future poll" > /// [`Pin`]: crate::pin::Pin "Pin" > /// [`Pin`]: crate::pin::Pin "Pin" > /// [`pin` module]: crate::pin "pin module" > /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpi= n" > /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe" > #[stable(feature =3D "pin", since =3D "1.33.0")] > #[diagnostic::on_unimplemented( > note =3D "consider using the `pin!` macro\nconsider using `Box::pin` = if > you need to access the pinned value outside of the current scope", message > =3D "`{Self}` cannot be unpinned" > )] > #[lang =3D "unpin"] > pub auto trait Unpin {} >=20 > /// A marker type which does not implement `Unpin`. > /// > /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by > default. #[stable(feature =3D "pin", since =3D "1.33.0")] > #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Has= h)] > pub struct PhantomPinned; >=20 > #[stable(feature =3D "pin", since =3D "1.33.0")] > impl !Unpin for PhantomPinned {} >=20 > marker_impls! { > #[stable(feature =3D "pin", since =3D "1.33.0")] > Unpin for > {T: ?Sized} &T, > {T: ?Sized} &mut T, > } >=20 > marker_impls! { > #[stable(feature =3D "pin_raw", since =3D "1.38.0")] > Unpin for > {T: ?Sized} *const T, > {T: ?Sized} *mut T, > } >=20 > /// A marker for types that can be dropped. > /// > /// This should be used for `~const` bounds, > /// as non-const bounds will always hold for every type. > #[unstable(feature =3D "const_destruct", issue =3D "133214")] > #[lang =3D "destruct"] > #[rustc_on_unimplemented(message =3D "can't drop `{Self}`", append_const_= msg)] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > #[cfg_attr(not(bootstrap), const_trait)] > pub trait Destruct {} >=20 > /// A marker for tuple types. > /// > /// The implementation of this trait is built-in and cannot be implemented > /// for any user type. > #[unstable(feature =3D "tuple_trait", issue =3D "none")] > #[lang =3D "tuple_trait"] > #[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > pub trait Tuple {} >=20 > /// A marker for pointer-like types. > /// > /// This trait can only be implemented for types that are certain to have > /// the same size and alignment as a [`usize`] or [`*const ()`](pointer). > /// To ensure this, there are special requirements on implementations > /// of `PointerLike` (other than the already-provided implementations > /// for built-in types): > /// > /// * The type must have `#[repr(transparent)]`. > /// * The type=E2=80=99s sole non-zero-sized field must itself implement > `PointerLike`. #[unstable(feature =3D "pointer_like_trait", issue =3D "no= ne")] > #[lang =3D "pointer_like"] > #[diagnostic::on_unimplemented( > message =3D "`{Self}` needs to have the same ABI as a pointer", > label =3D "`{Self}` needs to be a pointer-like type" > )] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > pub trait PointerLike {} >=20 > #[cfg(not(bootstrap))] > marker_impls! { > #[unstable(feature =3D "pointer_like_trait", issue =3D "none")] > PointerLike for > isize, > usize, > {T} &T, > {T} &mut T, > {T} *const T, > {T} *mut T, > {T: PointerLike} crate::pin::Pin, > } >=20 > /// A marker for types which can be used as types of `const` generic > parameters. /// > /// These types must have a proper equivalence relation (`Eq`) and it must > be automatically /// derived (`StructuralPartialEq`). There's a hard-coded > check in the compiler ensuring /// that all fields are also `ConstParamTy= `, > which implies that recursively, all fields /// are `StructuralPartialEq`. > #[lang =3D "const_param_ty"] > #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c= onst > parameter type")] #[allow(multiple_supertrait_upcastable)] > // We name this differently than the derive macro so that the > `adt_const_params` can // be used independently of `unsized_const_params` > without requiring a full path // to the derive macro every time it is use= d. > This should be renamed on stabilization. pub trait ConstParamTy_: > UnsizedConstParamTy + StructuralPartialEq + Eq {} >=20 > /// Derive macro generating an impl of the trait `ConstParamTy`. > #[rustc_builtin_macro] > #[allow_internal_unstable(unsized_const_params)] > #[unstable(feature =3D "adt_const_params", issue =3D "95174")] > pub macro ConstParamTy($item:item) { > /* compiler built-in */ > } >=20 > #[lang =3D "unsized_const_param_ty"] > #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a c= onst > parameter type")] /// A marker for types which can be used as types of > `const` generic parameters. /// > /// Equivalent to [`ConstParamTy_`] except that this is used by > /// the `unsized_const_params` to allow for fake unstable impls. > pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {} >=20 > /// Derive macro generating an impl of the trait `ConstParamTy`. > #[rustc_builtin_macro] > #[allow_internal_unstable(unsized_const_params)] > #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > pub macro UnsizedConstParamTy($item:item) { > /* compiler built-in */ > } >=20 > // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure` > marker_impls! { > #[unstable(feature =3D "adt_const_params", issue =3D "95174")] > ConstParamTy_ for > usize, u8, u16, u32, u64, u128, > isize, i8, i16, i32, i64, i128, > bool, > char, > (), > {T: ConstParamTy_, const N: usize} [T; N], > } >=20 > marker_impls! { > #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > UnsizedConstParamTy for > usize, u8, u16, u32, u64, u128, > isize, i8, i16, i32, i64, i128, > bool, > char, > (), > {T: UnsizedConstParamTy, const N: usize} [T; N], >=20 > str, > {T: UnsizedConstParamTy} [T], > {T: UnsizedConstParamTy + ?Sized} &T, > } >=20 > /// A common trait implemented by all function pointers. > #[unstable( > feature =3D "fn_ptr_trait", > issue =3D "none", > reason =3D "internal trait for implementing various traits for all > function pointers" )] > #[lang =3D "fn_ptr_trait"] > #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > pub trait FnPtr: Copy + Clone { > /// Returns the address of the function pointer. > #[lang =3D "fn_ptr_addr"] > fn addr(self) -> *const (); > } >=20 > /// Derive macro generating impls of traits related to smart pointers. > #[rustc_builtin_macro(CoercePointee, attributes(pointee))] > #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)] > #[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")] > #[cfg(not(bootstrap))] > pub macro CoercePointee($item:item) { > /* compiler built-in */ > } >=20 >=20 > ``` >=20 >=20 > In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version > 3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa > Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121 > Repository branch: feature/igc > System Description: NixOS 24.11 (Vicuna) >=20 > Configured using: > 'configure 'CFLAGS=3D-O3 -march=3Dnative' > --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feat= ure_i > gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=3Dyes > --with-imagemagick --with-modules --with-pgtk > --with-cairo --with-cairo-xcb --without-compress-install > --with-mailutils --with-tree-sitter --with-xinput2 > --enable-link-time-optimization --with-file-notification=3Dinotify' >=20 > Configured features: > ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ > IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY > INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF > TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB >=20 > Important settings: > value of $LC_COLLATE: C > value of $LC_MONETARY: en_US.UTF-8 > value of $LC_NUMERIC: en_US.UTF-8 > value of $LC_TIME: C > value of $LANG: en_US.UTF-8 > value of $XMODIFIERS: @im=3Dfcitx > locale-coding-system: utf-8-unix >=20 > Major mode: Elisp/l >=20 > Minor modes in effect: > restore-point-mode: t > global-atomic-chrome-edit-mode: t > global-git-gutter-mode: t > git-gutter-mode: t > marginalia-mode: t > elisp-def-mode: t > flycheck-posframe-mode: t > hungry-delete-mode: t > symbol-overlay-mode: t > keycast-tab-bar-mode: t > vertico-truncate-mode: t > vertico-multiform-mode: t > vertico-mode: t > telega-root-auto-fill-mode: t > telega-contact-birthdays-mode: t > telega-active-video-chats-mode: t > telega-active-locations-mode: t > telega-patrons-mode: t > telega-active-stories-mode: t > tab-line-nerd-icons-global-mode: t > global-tab-line-mode: t > tab-line-mode: t > ultra-scroll-mode: t > pixel-scroll-precision-mode: t > org-roam-db-autosync-mode: t > global-org-modern-mode: t > mu4e-modeline-mode: t > global-kkp-mode: t > global-git-commit-mode: t > flycheck-mode: t > engine-mode: t > symex-mode: t > global-evil-surround-mode: t > evil-surround-mode: t > yas-global-mode: t > yas-minor-mode: t > corfu-terminal-mode: t > corfu-history-mode: t > global-corfu-mode: t > corfu-mode: t > rainbow-mode: t > elisp-autofmt-mode: t > highlight-defined-mode: t > highlight-numbers-mode: t > hes-mode: t > rainbow-delimiters-mode: t > burly-tabs-mode: t > global-form-feed-st-mode: t > form-feed-st-mode: t > eat-eshell-mode: t > sly-symbol-completion-mode: t > super-save-mode: t > savehist-mode: t > which-key-mode: t > super-hint-xref-mode: t > super-hint-rg-mode: t > windmove-mode: t > server-mode: t > save-place-mode: t > recentf-mode: t > winner-mode: t > persistent-scratch-autosave-mode: t > global-dash-fontify-mode: t > dash-fontify-mode: t > nerd-icons-completion-mode: t > sudo-edit-indicator-mode: t > global-evil-visualstar-mode: t > evil-visualstar-mode: t > evil-commentary-mode: t > global-evil-mc-mode: t > evil-mc-mode: t > evil-lion-mode: t > global-evil-collection-unimpaired-mode: t > evil-collection-unimpaired-mode: t > buffer-face-mode: t > TeX-PDF-mode: t > display-line-numbers-mode: t > electric-pair-mode: t > global-auto-revert-mode: t > evil-mode: t > evil-local-mode: t > general-override-mode: t > minions-mode: t > el-patch-use-package-mode: t > elpaca-use-package-mode: t > override-global-mode: t > tooltip-mode: t > global-eldoc-mode: t > eldoc-mode: t > show-paren-mode: t > electric-indent-mode: t > mouse-wheel-mode: t > tab-bar-mode: t > file-name-shadow-mode: t > context-menu-mode: t > global-font-lock-mode: t > font-lock-mode: t > minibuffer-regexp-mode: t > column-number-mode: -1 > line-number-mode: -1 > transient-mark-mode: t > auto-composition-mode: t > auto-encryption-mode: t > auto-compression-mode: t >=20 > Load-path shadows: > /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs > /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs > /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35= a5 > 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-load= def > s /home/exec/.emacs.d/elpaca/builds/transient/transient hides > /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35= a5 > 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient >=20 > Features: > (shadow sort mail-extr expand-region yaml-mode-expansions > subword-mode-expansions text-mode-expansions cc-mode-expansions > the-org-mode-expansions python-el-fgallina-expansions > latex-mode-expansions js2-mode-expansions js-mode-expansions > web-mode-expansions html-mode-expansions clojure-mode-expansions > er-basic-expansions expand-region-core expand-region-custom > evil-collection-embark embark-org embark-consult embark gptel-curl > nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text > dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang > lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur > lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3 > lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform > lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity > lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp > lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r > lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls > lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell > lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint > lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik > lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json > lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql > lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark > lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir > lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber > lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol > lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion > lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm > lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot > copilot-balancer editorconfig editorconfig-core editorconfig-core-handle > editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic > gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads > consult-ag-autoloads restore-point evil-collection-atomic-chrome > atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert > flycheck-posframe evil-collection-hungry-delete hungry-delete > symbol-overlay keycast zig-mode reformatter empv vertico-truncate > vertico-posframe vertico-multiform evil-collection-vertico vertico > lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo > gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict > gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google > gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words > superword subword evil-collection-telega telega-obsolete telega > telega-tdlib-events telega-match telega-root telega-info telega-chat > telega-modes telega-company telega-emoji telega-user > telega-notifications telega-voip telega-msg telega-story telega-webpage > telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n > telega-sort telega-filter telega-ins telega-inline telega-util > telega-folders telega-topic telega-media telega-tdlib telega-server > telega-core telega-customize emacsbug tab-line-nerd-icons > evil-collection-imenu-list imenu-list tab-line rust-utils > rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo > rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack > rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext > evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header > evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base > org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam > org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id > org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam > org-capture emacsql-sqlite emacsql emacsql-compiler org-journal > org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e > mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts > mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg > gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark > mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders > mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars > mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode > kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review > pr-review-render pr-review-action magit-diff git-commit > evil-collection-log-edit log-edit pcvs-util add-log magit-core > magit-autorevert magit-margin magit-transient magit-process > evil-collection-with-editor with-editor magit-mode magit-git magit-base > pr-review-input pr-review-api ghub-graphql treepy gsexp ghub > pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc > evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline > lsp-rust lsp-semantic-tokens lsp-mode network-stream > evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol > llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt > minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr > pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement > ement-room-list taxy-magit-section taxy ement ement-notifications > ement-notify ement-room ewoc ement-lib ement-api ement-structs > ement-macros dns llm-ollama llm-provider-utils llm-models > llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil > symex-evil-support symex-hydra symex-transformations > symex-transformations-lisp symex-utils evil-cleverparens > evil-cleverparens-text-objects evil-cleverparens-util smartparens > evil-surround symex-misc symex-interface-builtins symex-interface-fennel > symex-interface-arc symex-interface-common-lisp symex-interface-clojure > symex-interface-scheme symex-interface-racket symex-interface-elisp > symex-interop symex-interface symex-traversals symex-dsl symex-evaluator > symex-computations symex-primitives symex-ts symex-utils-ts > symex-transformations-ts symex-primitives-lisp symex-data symex-ui > symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline > avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show > elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db > elfeed-lib xml-query dired-git-info dired-hacks dired-preview > evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf > yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon > corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu > consult-ls-git paredit clojure-ts-mode evil-collection-cider cider > tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend > cider-find cider-inspector cider-completion cider-profile cider-eval > cider-jar cider-repl-history cider-repl cider-resolve cider-test > cider-overlays cider-stacktrace cider-doc cider-browse-spec > cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common > cider-completion-context cider-connection cider-popup sesman-browser > nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode > rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers > parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell > chatgpt-shell-prompt-compose chatgpt-shell-perplexity > chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama > chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek > chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff > shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode > esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module > esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse > bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum > gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail > mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win > bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn > parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly > compile-multi form-feed-st google-this echo-bar fcitx > evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp > ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util > rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex > ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach > org-element org-persist org-id org-refile org-element-ast inline > avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode > explain-pause-top explain-pause-log-to-socket evil-collection-profiler > profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect > crux pest-mode popwin modus-themes blackboard-theme standard-themes > nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme > iscroll xml+ evil-textobj-tree-sitter > evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core > tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get > dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg > line-reminder ov ht fringe-helper solarized-theme solarized > solarized-faces sqlup-mode evil-collection-bm bm zen-mode > evil-collection-sly sly gud sly-completion sly-buttons sly-messages > sly-common evil-collection-apropos apropos evil-collection-arc-mode > arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme > hybrid-reverse-theme material-theme doom-themes doom-themes-base > nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme > almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme > mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme > wildcharm-theme atom-one-dark-theme parchment-theme autothemer > visual-fill-column transpose-frame gameoflife evil-collection-docker > docker docker-context docker-volume docker-network docker-image > docker-container docker-faces docker-core docker-compose docker-process > docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir > dumb-jump evil-collection-popup popup websocket bindat bing-dict cl > bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant > evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e > notifications gntp pinentry evil-collection-hackernews hackernews > evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello > notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message > notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company > notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib > diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail > yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec > smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe > evil-collection-consult consult clang-format apheleia apheleia-rcs > apheleia-dp apheleia-formatters apheleia-utils apheleia-log > apheleia-formatter-context vimrc-mode gnuplot olivetti super-save > evil-collection-helpful helpful cc-langs trace cl-print > evil-collection-edebug edebug evil-collection-debug debug backtrace > info-look evil-collection-info info help-fns radix-tree > evil-collection-elisp-refs elisp-refs solidity-mode solidity-common > evil-collection-git-timemachine git-timemachine web-mode disp-table > evil-collection-go-mode go-mode find-file evil-collection-js2-mode > js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads > empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads > vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads > lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads > alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads > telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads > rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads > writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads > makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads > org-sliced-images-autoloads consult-org-roam-autoloads > org-roam-autoloads org-journal-autoloads org-download-autoloads > org-modern-autoloads orderless-autoloads mu4e-autoloads > cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads > kkp-autoloads rfc-mode-autoloads string-inflection-autoloads > wakatime-mode-autoloads webpaste-autoloads systemd-autoloads > minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads > emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads > lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads > lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads > hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads > gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads > flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads > pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads > flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads > ement-autoloads taxy-magit-section-autoloads taxy-autoloads > embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads > plz-event-source-autoloads plz-media-type-autoloads plz-autoloads > symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads > iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads > evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads > combobulate-go combobulate-json combobulate-yaml combobulate-css > combobulate-js-ts combobulate-python combobulate-html combobulate-toml > combobulate-cursor multiple-cursors mc-separate-operations > rectangular-region-mode mc-mark-pop mc-edit-lines > mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors > multiple-cursors-core combobulate-query savehist evil-collection-scheme > scheme combobulate-ui combobulate-display let-alist combobulate-ztree > combobulate-envelope combobulate-manipulation evil-collection-python > python combobulate-procedure combobulate-navigation combobulate-misc > combobulate-setup tempo combobulate-interface combobulate-settings > combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads > elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee > dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads > diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads > consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads > cape-autoloads kind-icon-autoloads svg-lib-autoloads > corfu-terminal-autoloads popon-autoloads corfu-autoloads > copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads > paredit-autoloads clojure-ts-mode-autoloads cider-autoloads > clojure-mode-autoloads queue-autoloads spinner-autoloads > sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads > cargo-jump-xref-autoloads breadcrumb-autoloads > bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads > parseedn-autoloads parseclj-autoloads aidermacs-autoloads > mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads > magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads > treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads > cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads > form-feed-st-autoloads google-this-autoloads echo-bar-autoloads > zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads > chatgpt-autoloads polymode-autoloads ox-reveal-autoloads > htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads > weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads > emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads > modus-themes-autoloads blackboard-theme-autoloads > standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads > danneskjold-theme-autoloads srcery-theme-autoloads > subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads > multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads > evil-numbers-autoloads ctable-autoloads color-rg-autoloads > line-reminder-autoloads fringe-helper-autoloads ov-autoloads > solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads > zen-mode-autoloads sly-autoloads expand-region-autoloads > highlight-defined-autoloads base16-theme-autoloads > idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads > material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads > organic-green-theme-autoloads inkpot-theme-autoloads > github-dark-vscode-theme-autoloads almost-mono-themes-autoloads > cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads > mindre-theme-autoloads kaolin-themes-autoloads > tron-legacy-theme-autoloads wildcharm-theme-autoloads > atom-one-dark-theme-autoloads parchment-theme-autoloads > autothemer-autoloads visual-fill-column-autoloads > transpose-frame-autoloads gameoflife-autoloads docker-autoloads > aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads > cus-dir-autoloads dumb-jump-autoloads popup-autoloads > bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads > ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads > alarm-clock-autoloads pinentry-autoloads hackernews-autoloads > notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads > consult-autoloads clang-format-autoloads apheleia-autoloads > elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads > gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads > websocket-autoloads restore-point-autoloads ace-window-autoloads > avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads > elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads > web-mode-autoloads adoc-mode-autoloads go-mode-autoloads > js2-mode-autoloads rust-playground-autoloads evil-collection-which-key > which-key super-hint-xref super-hint-rg super-hint evil-collection-xref > xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C > evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp > org-macro org-src evil-collection-sh-script sh-script executable > ob-comint org-pcomplete org-list org-footnote org-faces org-entities > ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold > org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs > molecule-mode lsp hyperbole hideshow gptel-manual-complete > evil-collection-gptel gptel windmove evil-collection-flycheck flycheck > erc erc-backend erc-networks erc-common erc-compat erc-loaddefs > evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff > ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop > frameset server evil-collection-eww eww vtable mule-util url-queue > mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file > evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf > tree-widget winner edit-list refine loop list-utils prompts file-info > browse-at-remote f image-roll evil-collection-image image-mode exif > toc-mode rst scratch sql evil-collection-view view persistent-scratch > exercism persist async-await iter2 generator promise url-http url-auth > mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw > nsm promise-rejection-tracking promise-finally promise-done > promise-es6-extensions promise-core async request mailheader mail-utils > a indent-bars evil-collection-outline noutline outline mode-line-bell > powerthesaurus jeison dash s evil-collection-ripgrep ripgrep > evil-collection-wgrep wgrep evil-collection-grep grep > evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line > nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data > nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon > nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon > nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon > nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus > libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory > mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel > evil-collection-bookmark bookmark evil-collection-tablist tablist > tablist-filter semantic/wisent/comp semantic/wisent > semantic/wisent/wisent semantic/util-modes semantic/util semantic > semantic/tag semantic/lex semantic/fw mode-local find-func cedet > libmpdel tq time-stamp posframe esup esup-child benchmark > ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit > cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine > cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode > align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store > evil-collection-magit-section magit-section cursor-sensor llama nix-log > nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver > tramp-integration tramp-message tramp-compat shell pcomplete parse-time > iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax > evil-terminal-cursor-changer evil-visualstar evil-commentary > evil-commentary-integration evil-collection-evil-mc evil-mc > evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make > evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars > evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args > smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired > evil-collection-vc-git evil-collection-tabulated-list > evil-collection-tab-bar evil-collection-simple evil-collection-replace > evil-collection-process-menu evil-collection-package-menu > evil-collection-minibuffer evil-collection-man evil-collection-kmacro > evil-collection-indent evil-collection-imenu evil-collection-help > evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc > evil-collection-elpaca evil-collection-dired evil-collection-diff-mode > evil-collection-custom evil-collection-compile evil-collection-comint > evil-collection-calendar evil-collection-buff-menu evil-collection > annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes > files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill > kinsoku url-file puny svg dom preview latex latex-flymake flymake > project compile text-property-search comint ansi-osc tex-ispell > tex-style tex dbus xml crm texmathp auctex display-line-numbers > elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color > edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads > prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads > browse-at-remote-autoloads image-roll-autoloads > saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads > scratch-autoloads persistent-scratch-autoloads exercism-autoloads > a-autoloads request-autoloads async-autoloads async-await-autoloads > promise-autoloads iter2-autoloads persist-autoloads > indent-bars-autoloads rainbow-delimiters-autoloads > rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads > hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads > vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads > nerd-icons-dired-autoloads nerd-icons-completion-autoloads > nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads > libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads > tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads > ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads > json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads > toml-mode-autoloads highlight-escape-sequences-autoloads > highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads > nix-mode-autoloads magit-section-autoloads llama-autoloads > sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads > s-autoloads devdocs-autoloads mathjax-autoloads > evil-terminal-cursor-changer-autoloads evil-surround-autoloads > evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads > evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads > smartscan-autoloads timeout-autoloads ess-autoloads > info-colors-autoloads evil-collection-autoloads annalist-autoloads > sqlite3-autoloads treebundel-autoloads git-link-autoloads > texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell > which-func imenu man ansi-color autorevert filenotify cal-menu calendar > cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal > evil-jumps evil-command-window evil-types evil-search evil-ex > evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings > comp-run comp-common rx evil-common thingatpt rect evil-vars ring > undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads > transient pcase format-spec transient-autoloads general memoize > sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color > minions compat general-autoloads memoize-autoloads > color-theme-sanityinc-tomorrow-autoloads minions-autoloads > el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc > vc-dispatcher cl-extra help-mode elpaca-use-package use-package > use-package-ensure use-package-delight use-package-diminish > use-package-bind-key bind-key easy-mmode use-package-core > elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa > elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods > url-history url-cookie generate-lisp-file url-domsuf url-util url-parse > auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x > map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org > elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load > icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc > paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode > mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd > tool-bar dnd fontset image regexp-opt fringe tabulated-list replace > newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar > rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock > font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq > simple cl-generic indonesian philippine cham georgian utf-8-lang > misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms > cp51932 hebrew greek romanian slovak czech european ethiopic indian > cyrillic chinese composite emoji-zwj charscript charprop case-table > epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button > loaddefs theme-loaddefs faces cus-face macroexp files window > text-properties overlay sha1 md5 base64 format env code-pages mule > custom widget keymap hashtable-print-readable backquote threads dbusbind > inotify dynamic-setting system-font-setting font-render-setting cairo > gtk pgtk lcms2 multi-tty move-toolbar make-network-process > tty-child-frames native-compile mps emacs) >=20 > Memory information: > ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0) > (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0) > (buffers 1000 0)) --nextPart7128439.9J7NaK4W3v Content-Disposition: attachment; filename="rust-grammar-bug.png" Content-Transfer-Encoding: base64 Content-Type: image/png; name="rust-grammar-bug.png" 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 0Wgq1gAAAABJRU5ErkJggg== --nextPart7128439.9J7NaK4W3v-- From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 20 02:27:47 2025 Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 06:27:47 +0000 Received: from localhost ([127.0.0.1]:43893 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6O9b-0002M3-D2 for submit@debbugs.gnu.org; Sun, 20 Apr 2025 02:27:47 -0400 Received: from relay8-d.mail.gandi.net ([2001:4b98:dc4:8::228]:33203) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6O9Y-0002LX-TQ for 77914@debbugs.gnu.org; Sun, 20 Apr 2025 02:27:45 -0400 Received: by mail.gandi.net (Postfix) with ESMTPSA id 511F043B31; Sun, 20 Apr 2025 06:27:36 +0000 (UTC) From: Juri Linkov To: Vincenzo Pupillo Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color In-Reply-To: <3523927.LZWGnKmheA@fedora> Organization: LINKOV.NET References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> Date: Sun, 20 Apr 2025 09:15:51 +0300 Message-ID: <87mscbe5a8.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvfeejudelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjohhffffkfgggtgesthdtredttdertdenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucggtffrrghtthgvrhhnpeelieevuedtheeftdeguddtieelheekgeehveeghedtgfeuueeivddvhfevkeevgfenucffohhmrghinhepghhnuhdrohhrghenucfkphepledurdduvdelrddutdehrdduudejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledurdduvdelrddutdehrdduudejpdhhvghlohepmhgrihhlrdhgrghnughirdhnvghtpdhmrghilhhfrhhomhepjhhurhhisehlihhnkhhovhdrnhgvthdpnhgspghrtghpthhtohepfedprhgtphhtthhopegvgigvtghvhiesghhmrghilhdrtghomhdprhgtphhtthhopeejjeeludegseguvggssghughhsrdhgnhhurdhorhhgpdhrtghpthhtohepvhdrphhuphhilhhlohesghhmrghilhdrtghomh X-GND-Sasl: juri@linkov.net X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 77914 Cc: Eval Exec , 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > If the attached file is correct, it appears to be a grammar bug (the tree- > sitter-rust grammar). Take a look at the attached screenshot (libtree- > sitter-0.25.2 and tree-sitter-rust v0.24.0) Maybe this is related to Rust grammar version mismatch where the current rust-ts-mode works only with tree-sitter-rust v0.23.0: https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00430.html From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 20 03:19:53 2025 Received: (at submit) by debbugs.gnu.org; 20 Apr 2025 07:19:53 +0000 Received: from localhost ([127.0.0.1]:44281 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6Oxw-00005b-RN for submit@debbugs.gnu.org; Sun, 20 Apr 2025 03:19:53 -0400 Received: from lists.gnu.org ([2001:470:142::17]:35380) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6Oxq-00004s-BS for submit@debbugs.gnu.org; Sun, 20 Apr 2025 03:19:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u6Oxi-000833-4L for bug-gnu-emacs@gnu.org; Sun, 20 Apr 2025 03:19:34 -0400 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u6Oxb-0006Q6-Sn for bug-gnu-emacs@gnu.org; Sun, 20 Apr 2025 03:19:33 -0400 Received: by mail-pl1-x642.google.com with SMTP id d9443c01a7336-227d6b530d8so31118615ad.3 for ; Sun, 20 Apr 2025 00:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745133565; x=1745738365; darn=gnu.org; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=; b=SXhqKbfKH0w9ckbOwxlDsFfMflMMMr5Vcaa4r9IzzbXT7VHc7WmhwQNaVAaDtPIB1C /eElD8YkUTCmAEF+Ymuols4+KuBN4vlqaPDRjMZBefFqmiCaGLvvR3RLo0zkSwMTZ39G 9G6JjzFTeGR4WNwslTnhBDM4IXrsdEbKazzAyb4ZpIA32peMt6Q4DpT6auqKWb01B7JT HFXtUQPMiq97lUhUDh2yrtWHN3g1l7MHn7szb05Lrt6G3FYKprFfbwZ8OnjSoyZD1F7D ds4QsiP4SGFer0fAIXSegMygdV8Ik1fz0PZN8oglOykXlV5p/BJvpiThCoeUOfhYdR9N u0YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745133565; x=1745738365; h=content-transfer-encoding:in-reply-to:autocrypt:from :content-language:references:to:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=66FkkO0nThuk+v+ot92XcoRd/UnRY/Q0mreicvF4ayo=; b=uvPj4pRj+St2gL86/HpdLWCjmMZiA1oplQ3IMM3yMKLvESt5zYf99vze1B6oV895hO HDTc+HtjbHXkCy/AMRFmVTFZkpOM5F3gZbdn2gqTCJYolFdowLZbfCP/2+twd3APlO/0 47dRch8fTc/Rs6AypAkv5BqiBkaY34KyJFKQTH5WWfhnrV6HIMYIlZKKufA1UHxBAMXT qSDUEcJPCmcmhgLBbcwyaHGvCDqiZvAPvczdThuxEuZYy7oqpk30KtvBGSHTd8baszo3 jWwWBFyZic4fXLUCqTQ03nAjpW8CtOY6Q5UEiejF4tbiLeA61X/SFCkXPLZEsSj+mnNR WP1g== X-Forwarded-Encrypted: i=1; AJvYcCU+o3cguNQE526padhETOayK92/oKMcyqTwdGYl59sqMuk8CWFTq7IpORjEXVGnRQs3T/RSneqhy/TXju5C@gnu.org X-Gm-Message-State: AOJu0Yzl0u8M2SrXyKkswId+RmRUXti9Ml87+zTq01uCnibLBXDw540E a3xPPcX42udAuSLtV0xg/m0ufFLWcK6QgXmSIZkZ9eUDtmBl0y9jG0K4kllOw8zeMscI X-Gm-Gg: ASbGncsNtIZWtXzoUmAui9Lq7k1OZvzCSViHkRG9bUWXHJ2kynaY6ROJ3ebLVxfKIV2 WIyPED9mwoRsbIn4uLE1ErjBIje2kEi2FoZqJWNmF7ugqQM/Qt6o2OOCpCeK0k4a3NPWf4z/gJk Kws0vQlZt9Peq/j3A3i7gKL9h9sExvgVWAI8moh0/+rx1M6jZD4iI/UMd4UW/9Vbb22h1Wy+JG5 I6pkc4MXFbErOZD3bk/8yn1qOroguRHj2ZkLsQBlv8Lk0EnjAHu0YbTUAvdf5OGP82nn5N6rjE1 DmylU/pznUPod4RNTtXKG2O5oQ9GglP4gw== X-Google-Smtp-Source: AGHT+IFR+AucwWhh2c4EFMr0EnrZcZ7/2dmXkamqx61nmaJ/L56skSoNBTnci3hbPqA+fY036iFpyg== X-Received: by 2002:a17:902:dac7:b0:224:b60:3cd3 with SMTP id d9443c01a7336-22c53583e10mr110402305ad.19.1745133564579; Sun, 20 Apr 2025 00:19:24 -0700 (PDT) Received: from [28.0.0.1] ([124.64.126.60]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22c50bf3eb1sm44145935ad.82.2025.04.20.00.19.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 20 Apr 2025 00:19:24 -0700 (PDT) Message-ID: <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> Date: Sun, 20 Apr 2025 15:19:20 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color To: Vincenzo Pupillo , 77914@debbugs.gnu.org, bug-gnu-emacs@gnu.org References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> Content-Language: en-US From: Eval Exec Autocrypt: addr=execvy@gmail.com; keydata= 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 In-Reply-To: <3523927.LZWGnKmheA@fedora> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=2607:f8b0:4864:20::642; envelope-from=execvy@gmail.com; helo=mail-pl1-x642.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) Oh! In the reproduce step, I write a typo, the bug can be reproduced by setting different `treesit-font-lock-level`, wen `treesit-font-lock-level` is 3, all colors are good, when treesit-font-lock-level is 4, all colors are lost. To reproduce this: use this rust file: Then eval: 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) all color are lost. 2. (progn (setq treesit-font-lock-level 3) (revert-buffer)) colors are good. !Important, level 3 is good, but level 4 lost colors. 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) all color are lost again. Can you reproduce this? On 4/20/25 06:12, Vincenzo Pupillo wrote: > If the attached file is correct, it appears to be a grammar bug (the tree- > sitter-rust grammar). Take a look at the attached screenshot (libtree- > sitter-0.25.2 and tree-sitter-rust v0.24.0) > > Vincenzo > > In data sabato 19 aprile 2025 07:10:57 Ora legale dell’Europa centrale, Eval > Exec ha scritto: >> Hello, >> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all >> color are good, when I set treesit-font-lock-level to 4, all color as >> lost. >> To reproduce this: use this rust file: >> >> Then eval: >> 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) >> all color are lost. >> >> 2. (progn (setq treesit-font-lock-level 4) (revert-buffer)) >> colors are good. >> >> 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) >> all color are lost again. >> >> >> ```rust >> >> //! Primitive traits and types representing basic properties of types. >> //! >> //! Rust types can be classified in various useful ways according to >> //! their intrinsic properties. These classifications are represented >> //! as traits. >> >> #![stable(feature = "rust1", since = "1.0.0")] >> >> use crate::cell::UnsafeCell; >> use crate::cmp; >> use crate::fmt::Debug; >> use crate::hash::{Hash, Hasher}; >> >> /// Implements a given marker trait for multiple types at the same time. >> /// >> /// The basic syntax looks like this: >> /// ```ignore private macro >> /// marker_impls! { MarkerTrait for u8, i8 } >> /// ``` >> /// You can also implement `unsafe` traits >> /// ```ignore private macro >> /// marker_impls! { unsafe MarkerTrait for u8, i8 } >> /// ``` >> /// Add attributes to all impls: >> /// ```ignore private macro >> /// marker_impls! { >> /// #[allow(lint)] >> /// #[unstable(feature = "marker_trait", issue = "none")] >> /// MarkerTrait for u8, i8 >> /// } >> /// ``` >> /// And use generics: >> /// ```ignore private macro >> /// marker_impls! { >> /// MarkerTrait for >> /// u8, i8, >> /// {T: ?Sized} *const T, >> /// {T: ?Sized} *mut T, >> /// {T: MarkerTrait} PhantomData, >> /// u32, >> /// } >> /// ``` >> #[unstable(feature = "internal_impls_macro", issue = "none")] >> // Allow implementations of `UnsizedConstParamTy` even though std cannot use >> that feature. #[allow_internal_unstable(unsized_const_params)] >> macro marker_impls { >> ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty $(, >> $($rest:tt)*)? ) => { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trait for >> $T {} >> marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? } >> }, >> ( $(#[$($meta:tt)*])* $Trait:ident for ) => {}, >> >> ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? $T:ty >> $(, $($rest:tt)*)? ) => { $(#[$($meta)*])* unsafe impl< $($($bounds)*)? > >> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for >> $($($rest)*)? } }, >> ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) => {}, >> } >> >> /// Types that can be transferred across thread boundaries. >> /// >> /// This trait is automatically implemented when the compiler determines >> it's /// appropriate. >> /// >> /// An example of a non-`Send` type is the reference-counting pointer >> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that point to >> the same /// reference-counted value, they might try to update the >> reference count at the /// same time, which is [undefined behavior][ub] >> because [`Rc`] doesn't use atomic /// operations. Its cousin >> [`sync::Arc`][arc] does use atomic operations (incurring /// some overhead) >> and thus is `Send`. >> /// >> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync`] >> trait for more details. /// >> /// [`Rc`]: ../../std/rc/struct.Rc.html >> /// [arc]: ../../std/sync/struct.Arc.html >> /// [ub]: ../../reference/behavior-considered-undefined.html >> #[stable(feature = "rust1", since = "1.0.0")] >> #[cfg_attr(not(test), rustc_diagnostic_item = "Send")] >> #[diagnostic::on_unimplemented( >> message = "`{Self}` cannot be sent between threads safely", >> label = "`{Self}` cannot be sent between threads safely" >> )] >> pub unsafe auto trait Send { >> // empty. >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl !Send for *const T {} >> #[stable(feature = "rust1", since = "1.0.0")] >> impl !Send for *mut T {} >> >> // Most instances arise automatically, but this instance is needed to link >> up `T: Sync` with // `&T: Send` (and it also removes the unsound default >> instance `T Send` -> `&T: Send` that would // otherwise exist). >> #[stable(feature = "rust1", since = "1.0.0")] >> unsafe impl Send for &T {} >> >> /// Types with a constant size known at compile time. >> /// >> /// All type parameters have an implicit bound of `Sized`. The special >> syntax /// `?Sized` can be used to remove this bound if it's not >> appropriate. /// >> /// ``` >> /// # #![allow(dead_code)] >> /// struct Foo(T); >> /// struct Bar(T); >> /// >> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for >> [i32] /// struct BarUse(Bar<[i32]>); // OK >> /// ``` >> /// >> /// The one exception is the implicit `Self` type of a trait. A trait does >> not /// have an implicit `Sized` bound as this is incompatible with [trait >> object]s /// where, by definition, the trait needs to work with all >> possible implementors, /// and thus could be any size. >> /// >> /// Although Rust will let you bind `Sized` to a trait, you won't >> /// be able to use it to form a trait object later: >> /// >> /// ``` >> /// # #![allow(unused_variables)] >> /// trait Foo { } >> /// trait Bar: Sized { } >> /// >> /// struct Impl; >> /// impl Foo for Impl { } >> /// impl Bar for Impl { } >> /// >> /// let x: &dyn Foo = &Impl; // OK >> /// // let y: &dyn Bar = &Impl; // error: the trait `Bar` cannot >> /// // be made into an object >> /// ``` >> /// >> /// [trait object]: ../../book/ch17-02-trait-objects.html >> #[doc(alias = "?", alias = "?Sized")] >> #[stable(feature = "rust1", since = "1.0.0")] >> #[lang = "sized"] >> #[diagnostic::on_unimplemented( >> message = "the size for values of type `{Self}` cannot be known at >> compilation time", label = "doesn't have a size known at compile-time" >> )] >> #[fundamental] // for Default, for example, which requires that `[T]: >> !Default` be evaluatable #[rustc_specialization_trait] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> #[rustc_coinductive] >> pub trait Sized { >> // Empty. >> } >> >> /// Types that can be "unsized" to a dynamically-sized type. >> /// >> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8]>` >> and /// `Unsize`. >> /// >> /// All implementations of `Unsize` are provided automatically by the >> compiler. /// Those implementations are: >> /// >> /// - Arrays `[T; N]` implement `Unsize<[T]>`. >> /// - A type implements `Unsize` if all of these conditions >> are met: /// - The type implements `Trait`. >> /// - `Trait` is dyn-compatible[^1]. >> /// - The type is sized. >> /// - The type outlives `'a`. >> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize> ..., Un, ...>>` /// where any number of (type and const) parameters may be >> changed if all of these conditions /// are met: >> /// - Only the last field of `Foo` has a type involving the parameters >> `T1`, ..., `Tn`. /// - All other parameters of the struct are equal. >> /// - `Field: Unsize>`, where `Field<...>` >> stands for the actual /// type of the struct's last field. >> /// >> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow >> /// "user-defined" containers such as [`Rc`] to contain dynamically-sized >> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on >> coercion][nomicon-coerce] /// for more details. >> /// >> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized >> /// [`Rc`]: ../../std/rc/struct.Rc.html >> /// [RFC982]: >> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md /// >> [nomicon-coerce]: ../../nomicon/coercions.html >> /// [^1]: Formerly known as *object safe*. >> #[unstable(feature = "unsize", issue = "18598")] >> #[lang = "unsize"] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> pub trait Unsize { >> // Empty. >> } >> >> /// Required trait for constants used in pattern matches. >> /// >> /// Any type that derives `PartialEq` automatically implements this trait, >> /// *regardless* of whether its type-parameters implement `PartialEq`. >> /// >> /// If a `const` item contains some type that does not implement this trait, >> /// then that type either (1.) does not implement `PartialEq` (which means >> the /// constant will not provide that comparison method, which code >> generation /// assumes is available), or (2.) it implements *its own* >> version of /// `PartialEq` (which we assume does not conform to a >> structural-equality /// comparison). >> /// >> /// In either of the two scenarios above, we reject usage of such a constant >> in /// a pattern match. >> /// >> /// See also the [structural match RFC][RFC1445], and [issue 63438] which >> /// motivated migrating from an attribute-based design to this trait. >> /// >> /// [RFC1445]: >> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-constants-> in-patterns.md /// [issue 63438]: >> https://github.com/rust-lang/rust/issues/63438 >> #[unstable(feature = "structural_match", issue = "31434")] >> #[diagnostic::on_unimplemented(message = "the type `{Self}` does not >> `#[derive(PartialEq)]`")] #[lang = "structural_peq"] >> pub trait StructuralPartialEq { >> // Empty. >> } >> >> marker_impls! { >> #[unstable(feature = "structural_match", issue = "31434")] >> StructuralPartialEq for >> usize, u8, u16, u32, u64, u128, >> isize, i8, i16, i32, i64, i128, >> bool, >> char, >> str /* Technically requires `[u8]: StructuralPartialEq` */, >> (), >> {T, const N: usize} [T; N], >> {T} [T], >> {T: ?Sized} &T, >> } >> >> /// Types whose values can be duplicated simply by copying bits. >> /// >> /// By default, variable bindings have 'move semantics.' In other >> /// words: >> /// >> /// ``` >> /// #[derive(Debug)] >> /// struct Foo; >> /// >> /// let x = Foo; >> /// >> /// let y = x; >> /// >> /// // `x` has moved into `y`, and so cannot be used >> /// >> /// // println!("{x:?}"); // error: use of moved value >> /// ``` >> /// >> /// However, if a type implements `Copy`, it instead has 'copy semantics': >> /// >> /// ``` >> /// // We can derive a `Copy` implementation. `Clone` is also required, as >> it's /// // a supertrait of `Copy`. >> /// #[derive(Debug, Copy, Clone)] >> /// struct Foo; >> /// >> /// let x = Foo; >> /// >> /// let y = x; >> /// >> /// // `y` is a copy of `x` >> /// >> /// println!("{x:?}"); // A-OK! >> /// ``` >> /// >> /// It's important to note that in these two examples, the only difference >> is whether you /// are allowed to access `x` after the assignment. Under >> the hood, both a copy and a move /// can result in bits being copied in >> memory, although this is sometimes optimized away. /// >> /// ## How can I implement `Copy`? >> /// >> /// There are two ways to implement `Copy` on your type. The simplest is to >> use `derive`: /// >> /// ``` >> /// #[derive(Copy, Clone)] >> /// struct MyStruct; >> /// ``` >> /// >> /// You can also implement `Copy` and `Clone` manually: >> /// >> /// ``` >> /// struct MyStruct; >> /// >> /// impl Copy for MyStruct { } >> /// >> /// impl Clone for MyStruct { >> /// fn clone(&self) -> MyStruct { >> /// *self >> /// } >> /// } >> /// ``` >> /// >> /// There is a small difference between the two. The `derive` strategy will >> also place a `Copy` /// bound on type parameters: >> /// >> /// ``` >> /// #[derive(Clone)] >> /// struct MyStruct(T); >> /// >> /// impl Copy for MyStruct { } >> /// ``` >> /// >> /// This isn't always desired. For example, shared references (`&T`) can be >> copied regardless of /// whether `T` is `Copy`. Likewise, a generic struct >> containing markers such as [`PhantomData`] /// could potentially be >> duplicated with a bit-wise copy. >> /// >> /// ## What's the difference between `Copy` and `Clone`? >> /// >> /// Copies happen implicitly, for example as part of an assignment `y = x`. >> The behavior of /// `Copy` is not overloadable; it is always a simple >> bit-wise copy. /// >> /// Cloning is an explicit action, `x.clone()`. The implementation of >> [`Clone`] can /// provide any type-specific behavior necessary to duplicate >> values safely. For example, /// the implementation of [`Clone`] for >> [`String`] needs to copy the pointed-to string /// buffer in the heap. A >> simple bitwise copy of [`String`] values would merely copy the /// pointer, >> leading to a double free down the line. For this reason, [`String`] is >> [`Clone`] /// but not `Copy`. >> /// >> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` must >> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`] >> implementation only needs to return `*self` /// (see the example above). >> /// >> /// ## When can my type be `Copy`? >> /// >> /// A type can implement `Copy` if all of its components implement `Copy`. >> For example, this /// struct can be `Copy`: >> /// >> /// ``` >> /// # #[allow(dead_code)] >> /// #[derive(Copy, Clone)] >> /// struct Point { >> /// x: i32, >> /// y: i32, >> /// } >> /// ``` >> /// >> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is >> eligible to be `Copy`. /// By contrast, consider >> /// >> /// ``` >> /// # #![allow(dead_code)] >> /// # struct Point; >> /// struct PointList { >> /// points: Vec, >> /// } >> /// ``` >> /// >> /// The struct `PointList` cannot implement `Copy`, because [`Vec`] is >> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll get >> an error: /// >> /// ```text >> /// the trait `Copy` cannot be implemented for this type; field `points` >> does not implement `Copy` /// ``` >> /// >> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, even >> when it holds /// shared references of types `T` that are *not* `Copy`. >> Consider the following struct, /// which can implement `Copy`, because it >> only holds a *shared reference* to our non-`Copy` /// type `PointList` from >> above: >> /// >> /// ``` >> /// # #![allow(dead_code)] >> /// # struct PointList; >> /// #[derive(Copy, Clone)] >> /// struct PointListWrapper<'a> { >> /// point_list_ref: &'a PointList, >> /// } >> /// ``` >> /// >> /// ## When *can't* my type be `Copy`? >> /// >> /// Some types can't be copied safely. For example, copying `&mut T` would >> create an aliased /// mutable reference. Copying [`String`] would duplicate >> responsibility for managing the /// [`String`]'s buffer, leading to a >> double free. >> /// >> /// Generalizing the latter case, any type implementing [`Drop`] can't be >> `Copy`, because it's /// managing some resource besides its own >> [`size_of::`] bytes. /// >> /// If you try to implement `Copy` on a struct or enum containing non-`Copy` >> data, you will get /// the error [E0204]. >> /// >> /// [E0204]: ../../error_codes/E0204.html >> /// >> /// ## When *should* my type be `Copy`? >> /// >> /// Generally speaking, if your type _can_ implement `Copy`, it should. Keep >> in mind, though, /// that implementing `Copy` is part of the public API of >> your type. If the type might become /// non-`Copy` in the future, it could >> be prudent to omit the `Copy` implementation now, to /// avoid a breaking >> API change. >> /// >> /// ## Additional implementors >> /// >> /// In addition to the [implementors listed below][impls], >> /// the following types also implement `Copy`: >> /// >> /// * Function item types (i.e., the distinct types defined for each >> function) /// * Function pointer types (e.g., `fn() -> i32`) >> /// * Closure types, if they capture no value from the environment >> /// or if all such captured values implement `Copy` themselves. >> /// Note that variables captured by shared reference always implement >> `Copy` /// (even if the referent doesn't), >> /// while variables captured by mutable reference never implement `Copy`. >> /// >> /// [`Vec`]: ../../std/vec/struct.Vec.html >> /// [`String`]: ../../std/string/struct.String.html >> /// [`size_of::`]: crate::mem::size_of >> /// [impls]: #implementors >> #[stable(feature = "rust1", since = "1.0.0")] >> #[lang = "copy"] >> // FIXME(matthewjasper) This allows copying a type that doesn't implement >> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when only >> // `A<'static>: Copy` and `A<'_>: Clone`). >> // We have this attribute here for now only because there are quite a few >> // existing specializations on `Copy` that already exist in the standard >> // library, and there's no way to safely have this behavior right now. >> #[rustc_unsafe_specialization_marker] >> #[rustc_diagnostic_item = "Copy"] >> pub trait Copy: Clone { >> // Empty. >> } >> >> /// Derive macro generating an impl of the trait `Copy`. >> #[rustc_builtin_macro] >> #[stable(feature = "builtin_macro_prelude", since = "1.38.0")] >> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)] >> pub macro Copy($item:item) { >> /* compiler built-in */ >> } >> >> // Implementations of `Copy` for primitive types. >> // >> // Implementations that cannot be described in Rust >> // are implemented in `traits::SelectionContext::copy_clone_conditions()` >> // in `rustc_trait_selection`. >> marker_impls! { >> #[stable(feature = "rust1", since = "1.0.0")] >> Copy for >> usize, u8, u16, u32, u64, u128, >> isize, i8, i16, i32, i64, i128, >> f16, f32, f64, f128, >> bool, char, >> {T: ?Sized} *const T, >> {T: ?Sized} *mut T, >> >> } >> >> #[unstable(feature = "never_type", issue = "35121")] >> impl Copy for ! {} >> >> /// Shared references can be copied, but mutable references *cannot*! >> #[stable(feature = "rust1", since = "1.0.0")] >> impl Copy for &T {} >> >> /// Types for which it is safe to share references between threads. >> /// >> /// This trait is automatically implemented when the compiler determines >> /// it's appropriate. >> /// >> /// The precise definition is: a type `T` is [`Sync`] if and only if `&T` is >> /// [`Send`]. In other words, if there is no possibility of >> /// [undefined behavior][ub] (including data races) when passing >> /// `&T` references between threads. >> /// >> /// As one would expect, primitive types like [`u8`] and [`f64`] >> /// are all [`Sync`], and so are simple aggregate types containing them, >> /// like tuples, structs and enums. More examples of basic [`Sync`] >> /// types include "immutable" types like `&T`, and those with simple >> /// inherited mutability, such as [`Box`][box], [`Vec`][vec] and >> /// most other collection types. (Generic parameters need to be [`Sync`] >> /// for their container to be [`Sync`].) >> /// >> /// A somewhat surprising consequence of the definition is that `&mut T` >> /// is `Sync` (if `T` is `Sync`) even though it seems like that might >> /// provide unsynchronized mutation. The trick is that a mutable >> /// reference behind a shared reference (that is, `& &mut T`) >> /// becomes read-only, as if it were a `& &T`. Hence there is no risk >> /// of a data race. >> /// >> /// A shorter overview of how [`Sync`] and [`Send`] relate to referencing: >> /// * `&T` is [`Send`] if and only if `T` is [`Sync`] >> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`] >> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`] >> /// >> /// Types that are not `Sync` are those that have "interior >> /// mutability" in a non-thread-safe form, such as [`Cell`][cell] >> /// and [`RefCell`][refcell]. These types allow for mutation of >> /// their contents even through an immutable, shared reference. For >> /// example the `set` method on [`Cell`][cell] takes `&self`, so it >> requires /// only a shared reference [`&Cell`][cell]. The method >> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`. >> /// >> /// Another example of a non-`Sync` type is the reference-counting >> /// pointer [`Rc`][rc]. Given any reference [`&Rc`][rc], you can clone >> /// a new [`Rc`][rc], modifying the reference counts in a non-atomic way. >> /// >> /// For cases when one does need thread-safe interior mutability, >> /// Rust provides [atomic data types], as well as explicit locking via >> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types >> /// ensure that any mutation cannot cause data races, hence the types >> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe >> /// analogue of [`Rc`][rc]. >> /// >> /// Any types with interior mutability must also use the >> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which >> /// can be mutated through a shared reference. Failing to doing this is >> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing >> /// from `&T` to `&mut T` is invalid. >> /// >> /// See [the Nomicon][nomicon-send-and-sync] for more details about `Sync`. >> /// >> /// [box]: ../../std/boxed/struct.Box.html >> /// [vec]: ../../std/vec/struct.Vec.html >> /// [cell]: crate::cell::Cell >> /// [refcell]: crate::cell::RefCell >> /// [rc]: ../../std/rc/struct.Rc.html >> /// [arc]: ../../std/sync/struct.Arc.html >> /// [atomic data types]: crate::sync::atomic >> /// [mutex]: ../../std/sync/struct.Mutex.html >> /// [rwlock]: ../../std/sync/struct.RwLock.html >> /// [unsafecell]: crate::cell::UnsafeCell >> /// [ub]: ../../reference/behavior-considered-undefined.html >> /// [transmute]: crate::mem::transmute >> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html >> #[stable(feature = "rust1", since = "1.0.0")] >> #[cfg_attr(not(test), rustc_diagnostic_item = "Sync")] >> #[lang = "sync"] >> #[rustc_on_unimplemented( >> on( >> _Self = "core::cell::once::OnceCell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::OnceLock` instead" ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` instead", >> ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` instead", >> ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` >> instead", ), >> on( >> _Self = "core::cell::Cell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` >> instead", ), >> on( >> all( >> _Self = "core::cell::Cell", >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell"), >> not(_Self = "core::cell::Cell") >> ), >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock`", ), >> on( >> _Self = "core::cell::RefCell", >> note = "if you want to do aliasing and mutation between multiple >> threads, use `std::sync::RwLock` instead", ), >> message = "`{Self}` cannot be shared between threads safely", >> label = "`{Self}` cannot be shared between threads safely" >> )] >> pub unsafe auto trait Sync { >> // FIXME(estebank): once support to add notes in >> `rustc_on_unimplemented` // lands in beta, and it has been extended to >> check whether a closure is // anywhere in the requirement chain, extend it >> as such (#48534): // ``` >> // on( >> // closure, >> // note="`{Self}` cannot be shared safely, consider marking the >> closure `move`" // ), >> // ``` >> >> // Empty >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl !Sync for *const T {} >> #[stable(feature = "rust1", since = "1.0.0")] >> impl !Sync for *mut T {} >> >> /// Zero-sized type used to mark things that "act like" they own a `T`. >> /// >> /// Adding a `PhantomData` field to your type tells the compiler that >> your /// type acts as though it stores a value of type `T`, even though it >> doesn't /// really. This information is used when computing certain safety >> properties. /// >> /// For a more in-depth explanation of how to use `PhantomData`, please >> see /// [the Nomicon](../../nomicon/phantom-data.html). >> /// >> /// # A ghastly note 👻👻👻 >> /// >> /// Though they both have scary names, `PhantomData` and 'phantom types' are >> /// related, but not identical. A phantom type parameter is simply a type >> /// parameter which is never used. In Rust, this often causes the compiler >> to /// complain, and the solution is to add a "dummy" use by way of >> `PhantomData`. /// >> /// # Examples >> /// >> /// ## Unused lifetime parameters >> /// >> /// Perhaps the most common use case for `PhantomData` is a struct that has >> an /// unused lifetime parameter, typically as part of some unsafe code. >> For /// example, here is a struct `Slice` that has two pointers of type >> `*const T`, /// presumably pointing into an array somewhere: >> /// >> /// ```compile_fail,E0392 >> /// struct Slice<'a, T> { >> /// start: *const T, >> /// end: *const T, >> /// } >> /// ``` >> /// >> /// The intention is that the underlying data is only valid for the >> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this >> /// intent is not expressed in the code, since there are no uses of >> /// the lifetime `'a` and hence it is not clear what data it applies >> /// to. We can correct this by telling the compiler to act *as if* the >> /// `Slice` struct contained a reference `&'a T`: >> /// >> /// ``` >> /// use std::marker::PhantomData; >> /// >> /// # #[allow(dead_code)] >> /// struct Slice<'a, T> { >> /// start: *const T, >> /// end: *const T, >> /// phantom: PhantomData<&'a T>, >> /// } >> /// ``` >> /// >> /// This also in turn infers the lifetime bound `T: 'a`, indicating >> /// that any references in `T` are valid over the lifetime `'a`. >> /// >> /// When initializing a `Slice` you simply provide the value >> /// `PhantomData` for the field `phantom`: >> /// >> /// ``` >> /// # #![allow(dead_code)] >> /// # use std::marker::PhantomData; >> /// # struct Slice<'a, T> { >> /// # start: *const T, >> /// # end: *const T, >> /// # phantom: PhantomData<&'a T>, >> /// # } >> /// fn borrow_vec(vec: &Vec) -> Slice<'_, T> { >> /// let ptr = vec.as_ptr(); >> /// Slice { >> /// start: ptr, >> /// end: unsafe { ptr.add(vec.len()) }, >> /// phantom: PhantomData, >> /// } >> /// } >> /// ``` >> /// >> /// ## Unused type parameters >> /// >> /// It sometimes happens that you have unused type parameters which >> /// indicate what type of data a struct is "tied" to, even though that >> /// data is not actually found in the struct itself. Here is an >> /// example where this arises with [FFI]. The foreign interface uses >> /// handles of type `*mut ()` to refer to Rust values of different >> /// types. We track the Rust type using a phantom type parameter on >> /// the struct `ExternalResource` which wraps a handle. >> /// >> /// [FFI]: >> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external >> -code /// >> /// ``` >> /// # #![allow(dead_code)] >> /// # trait ResType { } >> /// # struct ParamType; >> /// # mod foreign_lib { >> /// # pub fn new(_: usize) -> *mut () { 42 as *mut () } >> /// # pub fn do_stuff(_: *mut (), _: usize) {} >> /// # } >> /// # fn convert_params(_: ParamType) -> usize { 42 } >> /// use std::marker::PhantomData; >> /// use std::mem; >> /// >> /// struct ExternalResource { >> /// resource_handle: *mut (), >> /// resource_type: PhantomData, >> /// } >> /// >> /// impl ExternalResource { >> /// fn new() -> Self { >> /// let size_of_res = mem::size_of::(); >> /// Self { >> /// resource_handle: foreign_lib::new(size_of_res), >> /// resource_type: PhantomData, >> /// } >> /// } >> /// >> /// fn do_stuff(&self, param: ParamType) { >> /// let foreign_params = convert_params(param); >> /// foreign_lib::do_stuff(self.resource_handle, foreign_params); >> /// } >> /// } >> /// ``` >> /// >> /// ## Ownership and the drop check >> /// >> /// The exact interaction of `PhantomData` with drop check **may change in >> the future**. /// >> /// Currently, adding a field of type `PhantomData` indicates that your >> type *owns* data of type /// `T` in very rare circumstances. This in turn >> has effects on the Rust compiler's [drop check] /// analysis. For the exact >> rules, see the [drop check] documentation. /// >> /// ## Layout >> /// >> /// For all `T`, the following are guaranteed: >> /// * `size_of::>() == 0` >> /// * `align_of::>() == 1` >> /// >> /// [drop check]: Drop#drop-check >> #[lang = "phantom_data"] >> #[stable(feature = "rust1", since = "1.0.0")] >> pub struct PhantomData; >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl Hash for PhantomData { >> #[inline] >> fn hash(&self, _: &mut H) {} >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl cmp::PartialEq for PhantomData { >> fn eq(&self, _other: &PhantomData) -> bool { >> true >> } >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl cmp::Eq for PhantomData {} >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl cmp::PartialOrd for PhantomData { >> fn partial_cmp(&self, _other: &PhantomData) -> Option >> { Option::Some(cmp::Ordering::Equal) >> } >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl cmp::Ord for PhantomData { >> fn cmp(&self, _other: &PhantomData) -> cmp::Ordering { >> cmp::Ordering::Equal >> } >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl Copy for PhantomData {} >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl Clone for PhantomData { >> fn clone(&self) -> Self { >> Self >> } >> } >> >> #[stable(feature = "rust1", since = "1.0.0")] >> impl Default for PhantomData { >> fn default() -> Self { >> Self >> } >> } >> >> #[unstable(feature = "structural_match", issue = "31434")] >> impl StructuralPartialEq for PhantomData {} >> >> /// Compiler-internal trait used to indicate the type of enum discriminants. >> /// >> /// This trait is automatically implemented for every type and does not add >> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavior** >> to transmute /// between `DiscriminantKind::Discriminant` and >> `mem::Discriminant`. /// >> /// [`mem::Discriminant`]: crate::mem::Discriminant >> #[unstable( >> feature = "discriminant_kind", >> issue = "none", >> reason = "this trait is unlikely to ever be stabilized, use >> `mem::discriminant` instead" )] >> #[lang = "discriminant_kind"] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> pub trait DiscriminantKind { >> /// The type of the discriminant, which must satisfy the trait >> /// bounds required by `mem::Discriminant`. >> #[lang = "discriminant_type"] >> type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + Send + >> Sync + Unpin; } >> >> /// Used to determine whether a type contains >> /// any `UnsafeCell` internally, but not through an indirection. >> /// This affects, for example, whether a `static` of that type is >> /// placed in read-only static memory or writable static memory. >> /// This can be used to declare that a constant with a generic type >> /// will not contain interior mutability, and subsequently allow >> /// placing the constant behind references. >> /// >> /// # Safety >> /// >> /// This trait is a core part of the language, it is just expressed as a >> trait in libcore for /// convenience. Do *not* implement it for other >> types. >> // FIXME: Eventually this trait should become `#[rustc_deny_explicit_impl]`. >> // That requires porting the impls below to native internal impls. #[lang = >> "freeze"] >> #[unstable(feature = "freeze", issue = "121675")] >> pub unsafe auto trait Freeze {} >> >> #[unstable(feature = "freeze", issue = "121675")] >> impl !Freeze for UnsafeCell {} >> marker_impls! { >> #[unstable(feature = "freeze", issue = "121675")] >> unsafe Freeze for >> {T: ?Sized} PhantomData, >> {T: ?Sized} *const T, >> {T: ?Sized} *mut T, >> {T: ?Sized} &T, >> {T: ?Sized} &mut T, >> } >> >> /// Types that do not require any pinning guarantees. >> /// >> /// For information on what "pinning" is, see the [`pin` module] >> documentation. /// >> /// Implementing the `Unpin` trait for `T` expresses the fact that `T` is >> pinning-agnostic: /// it shall not expose nor rely on any pinning >> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to such a >> type can feature a *fully unrestricted* API. /// In other words, if `T: >> Unpin`, a value of type `T` will *not* be bound by the invariants /// which >> pinning otherwise offers, even when "pinned" by a [`Pin`] pointing at >> it. /// When a value of type `T` is pointed at by a [`Pin`], [`Pin`] >> will not restrict access /// to the pointee value like it normally would, >> thus allowing the user to do anything that they /// normally could with a >> non-[`Pin`]-wrapped `Ptr` to that value. /// >> /// The idea of this trait is to alleviate the reduced ergonomics of APIs >> that require the use /// of [`Pin`] for soundness for some types, but which >> also want to be used by other types that /// don't care about pinning. The >> prime example of such an API is [`Future::poll`]. There are many /// >> [`Future`] types that don't care about pinning. These futures can implement >> `Unpin` and /// therefore get around the pinning related restrictions in >> the API, while still allowing the /// subset of [`Future`]s which *do* >> require pinning to be implemented soundly. /// >> /// For more discussion on the consequences of [`Unpin`] within the wider >> scope of the pinning /// system, see the [section about `Unpin`] in the >> [`pin` module]. /// >> /// `Unpin` has no consequence at all for non-pinned data. In particular, >> [`mem::replace`] happily /// moves `!Unpin` data, which would be immovable >> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when `T: >> Unpin`). >> /// >> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which is >> *pinned* by being wrapped /// inside a [`Pin`] pointing at it. This is >> because you cannot (safely) use a /// [`Pin`] to get a `&mut T` to its >> pointee value, which you would need to call /// [`mem::replace`], and >> *that* is what makes this system work. >> /// >> /// So this, for example, can only be done on types implementing `Unpin`: >> /// >> /// ```rust >> /// # #![allow(unused_must_use)] >> /// use std::mem; >> /// use std::pin::Pin; >> /// >> /// let mut string = "this".to_string(); >> /// let mut pinned_string = Pin::new(&mut string); >> /// >> /// // We need a mutable reference to call `mem::replace`. >> /// // We can obtain such a reference by (implicitly) invoking >> `Pin::deref_mut`, /// // but that is only possible because `String` >> implements `Unpin`. /// mem::replace(&mut *pinned_string, >> "other".to_string()); >> /// ``` >> /// >> /// This trait is automatically implemented for almost every type. The >> compiler is free /// to take the conservative stance of marking types as >> [`Unpin`] so long as all of the types that /// compose its fields are also >> [`Unpin`]. This is because if a type implements [`Unpin`], then it /// is >> unsound for that type's implementation to rely on pinning-related >> guarantees for soundness, /// *even* when viewed through a "pinning" >> pointer! It is the responsibility of the implementor of /// a type that >> relies upon pinning for soundness to ensure that type is *not* marked as >> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see the >> [`pin` module] docs. /// >> /// [`mem::replace`]: crate::mem::replace "mem replace" >> /// [`Future`]: crate::future::Future "Future" >> /// [`Future::poll`]: crate::future::Future::poll "Future poll" >> /// [`Pin`]: crate::pin::Pin "Pin" >> /// [`Pin`]: crate::pin::Pin "Pin" >> /// [`pin` module]: crate::pin "pin module" >> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about unpin" >> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe" >> #[stable(feature = "pin", since = "1.33.0")] >> #[diagnostic::on_unimplemented( >> note = "consider using the `pin!` macro\nconsider using `Box::pin` if >> you need to access the pinned value outside of the current scope", message >> = "`{Self}` cannot be unpinned" >> )] >> #[lang = "unpin"] >> pub auto trait Unpin {} >> >> /// A marker type which does not implement `Unpin`. >> /// >> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` by >> default. #[stable(feature = "pin", since = "1.33.0")] >> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] >> pub struct PhantomPinned; >> >> #[stable(feature = "pin", since = "1.33.0")] >> impl !Unpin for PhantomPinned {} >> >> marker_impls! { >> #[stable(feature = "pin", since = "1.33.0")] >> Unpin for >> {T: ?Sized} &T, >> {T: ?Sized} &mut T, >> } >> >> marker_impls! { >> #[stable(feature = "pin_raw", since = "1.38.0")] >> Unpin for >> {T: ?Sized} *const T, >> {T: ?Sized} *mut T, >> } >> >> /// A marker for types that can be dropped. >> /// >> /// This should be used for `~const` bounds, >> /// as non-const bounds will always hold for every type. >> #[unstable(feature = "const_destruct", issue = "133214")] >> #[lang = "destruct"] >> #[rustc_on_unimplemented(message = "can't drop `{Self}`", append_const_msg)] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> #[cfg_attr(not(bootstrap), const_trait)] >> pub trait Destruct {} >> >> /// A marker for tuple types. >> /// >> /// The implementation of this trait is built-in and cannot be implemented >> /// for any user type. >> #[unstable(feature = "tuple_trait", issue = "none")] >> #[lang = "tuple_trait"] >> #[diagnostic::on_unimplemented(message = "`{Self}` is not a tuple")] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> pub trait Tuple {} >> >> /// A marker for pointer-like types. >> /// >> /// This trait can only be implemented for types that are certain to have >> /// the same size and alignment as a [`usize`] or [`*const ()`](pointer). >> /// To ensure this, there are special requirements on implementations >> /// of `PointerLike` (other than the already-provided implementations >> /// for built-in types): >> /// >> /// * The type must have `#[repr(transparent)]`. >> /// * The type’s sole non-zero-sized field must itself implement >> `PointerLike`. #[unstable(feature = "pointer_like_trait", issue = "none")] >> #[lang = "pointer_like"] >> #[diagnostic::on_unimplemented( >> message = "`{Self}` needs to have the same ABI as a pointer", >> label = "`{Self}` needs to be a pointer-like type" >> )] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> pub trait PointerLike {} >> >> #[cfg(not(bootstrap))] >> marker_impls! { >> #[unstable(feature = "pointer_like_trait", issue = "none")] >> PointerLike for >> isize, >> usize, >> {T} &T, >> {T} &mut T, >> {T} *const T, >> {T} *mut T, >> {T: PointerLike} crate::pin::Pin, >> } >> >> /// A marker for types which can be used as types of `const` generic >> parameters. /// >> /// These types must have a proper equivalence relation (`Eq`) and it must >> be automatically /// derived (`StructuralPartialEq`). There's a hard-coded >> check in the compiler ensuring /// that all fields are also `ConstParamTy`, >> which implies that recursively, all fields /// are `StructuralPartialEq`. >> #[lang = "const_param_ty"] >> #[unstable(feature = "unsized_const_params", issue = "95174")] >> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const >> parameter type")] #[allow(multiple_supertrait_upcastable)] >> // We name this differently than the derive macro so that the >> `adt_const_params` can // be used independently of `unsized_const_params` >> without requiring a full path // to the derive macro every time it is used. >> This should be renamed on stabilization. pub trait ConstParamTy_: >> UnsizedConstParamTy + StructuralPartialEq + Eq {} >> >> /// Derive macro generating an impl of the trait `ConstParamTy`. >> #[rustc_builtin_macro] >> #[allow_internal_unstable(unsized_const_params)] >> #[unstable(feature = "adt_const_params", issue = "95174")] >> pub macro ConstParamTy($item:item) { >> /* compiler built-in */ >> } >> >> #[lang = "unsized_const_param_ty"] >> #[unstable(feature = "unsized_const_params", issue = "95174")] >> #[diagnostic::on_unimplemented(message = "`{Self}` can't be used as a const >> parameter type")] /// A marker for types which can be used as types of >> `const` generic parameters. /// >> /// Equivalent to [`ConstParamTy_`] except that this is used by >> /// the `unsized_const_params` to allow for fake unstable impls. >> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {} >> >> /// Derive macro generating an impl of the trait `ConstParamTy`. >> #[rustc_builtin_macro] >> #[allow_internal_unstable(unsized_const_params)] >> #[unstable(feature = "unsized_const_params", issue = "95174")] >> pub macro UnsizedConstParamTy($item:item) { >> /* compiler built-in */ >> } >> >> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure` >> marker_impls! { >> #[unstable(feature = "adt_const_params", issue = "95174")] >> ConstParamTy_ for >> usize, u8, u16, u32, u64, u128, >> isize, i8, i16, i32, i64, i128, >> bool, >> char, >> (), >> {T: ConstParamTy_, const N: usize} [T; N], >> } >> >> marker_impls! { >> #[unstable(feature = "unsized_const_params", issue = "95174")] >> UnsizedConstParamTy for >> usize, u8, u16, u32, u64, u128, >> isize, i8, i16, i32, i64, i128, >> bool, >> char, >> (), >> {T: UnsizedConstParamTy, const N: usize} [T; N], >> >> str, >> {T: UnsizedConstParamTy} [T], >> {T: UnsizedConstParamTy + ?Sized} &T, >> } >> >> /// A common trait implemented by all function pointers. >> #[unstable( >> feature = "fn_ptr_trait", >> issue = "none", >> reason = "internal trait for implementing various traits for all >> function pointers" )] >> #[lang = "fn_ptr_trait"] >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object = >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] >> pub trait FnPtr: Copy + Clone { >> /// Returns the address of the function pointer. >> #[lang = "fn_ptr_addr"] >> fn addr(self) -> *const (); >> } >> >> /// Derive macro generating impls of traits related to smart pointers. >> #[rustc_builtin_macro(CoercePointee, attributes(pointee))] >> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)] >> #[unstable(feature = "derive_coerce_pointee", issue = "123430")] >> #[cfg(not(bootstrap))] >> pub macro CoercePointee($item:item) { >> /* compiler built-in */ >> } >> >> >> ``` >> >> >> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version >> 3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa >> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121 >> Repository branch: feature/igc >> System Description: NixOS 24.11 (Vicuna) >> >> Configured using: >> 'configure 'CFLAGS=-O3 -march=native' >> --prefix=/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_i >> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=yes >> --with-imagemagick --with-modules --with-pgtk >> --with-cairo --with-cairo-xcb --without-compress-install >> --with-mailutils --with-tree-sitter --with-xinput2 >> --enable-link-time-optimization --with-file-notification=inotify' >> >> Configured features: >> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ >> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY >> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF >> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB >> >> Important settings: >> value of $LC_COLLATE: C >> value of $LC_MONETARY: en_US.UTF-8 >> value of $LC_NUMERIC: en_US.UTF-8 >> value of $LC_TIME: C >> value of $LANG: en_US.UTF-8 >> value of $XMODIFIERS: @im=fcitx >> locale-coding-system: utf-8-unix >> >> Major mode: Elisp/l >> >> Minor modes in effect: >> restore-point-mode: t >> global-atomic-chrome-edit-mode: t >> global-git-gutter-mode: t >> git-gutter-mode: t >> marginalia-mode: t >> elisp-def-mode: t >> flycheck-posframe-mode: t >> hungry-delete-mode: t >> symbol-overlay-mode: t >> keycast-tab-bar-mode: t >> vertico-truncate-mode: t >> vertico-multiform-mode: t >> vertico-mode: t >> telega-root-auto-fill-mode: t >> telega-contact-birthdays-mode: t >> telega-active-video-chats-mode: t >> telega-active-locations-mode: t >> telega-patrons-mode: t >> telega-active-stories-mode: t >> tab-line-nerd-icons-global-mode: t >> global-tab-line-mode: t >> tab-line-mode: t >> ultra-scroll-mode: t >> pixel-scroll-precision-mode: t >> org-roam-db-autosync-mode: t >> global-org-modern-mode: t >> mu4e-modeline-mode: t >> global-kkp-mode: t >> global-git-commit-mode: t >> flycheck-mode: t >> engine-mode: t >> symex-mode: t >> global-evil-surround-mode: t >> evil-surround-mode: t >> yas-global-mode: t >> yas-minor-mode: t >> corfu-terminal-mode: t >> corfu-history-mode: t >> global-corfu-mode: t >> corfu-mode: t >> rainbow-mode: t >> elisp-autofmt-mode: t >> highlight-defined-mode: t >> highlight-numbers-mode: t >> hes-mode: t >> rainbow-delimiters-mode: t >> burly-tabs-mode: t >> global-form-feed-st-mode: t >> form-feed-st-mode: t >> eat-eshell-mode: t >> sly-symbol-completion-mode: t >> super-save-mode: t >> savehist-mode: t >> which-key-mode: t >> super-hint-xref-mode: t >> super-hint-rg-mode: t >> windmove-mode: t >> server-mode: t >> save-place-mode: t >> recentf-mode: t >> winner-mode: t >> persistent-scratch-autosave-mode: t >> global-dash-fontify-mode: t >> dash-fontify-mode: t >> nerd-icons-completion-mode: t >> sudo-edit-indicator-mode: t >> global-evil-visualstar-mode: t >> evil-visualstar-mode: t >> evil-commentary-mode: t >> global-evil-mc-mode: t >> evil-mc-mode: t >> evil-lion-mode: t >> global-evil-collection-unimpaired-mode: t >> evil-collection-unimpaired-mode: t >> buffer-face-mode: t >> TeX-PDF-mode: t >> display-line-numbers-mode: t >> electric-pair-mode: t >> global-auto-revert-mode: t >> evil-mode: t >> evil-local-mode: t >> general-override-mode: t >> minions-mode: t >> el-patch-use-package-mode: t >> elpaca-use-package-mode: t >> override-global-mode: t >> tooltip-mode: t >> global-eldoc-mode: t >> eldoc-mode: t >> show-paren-mode: t >> electric-indent-mode: t >> mouse-wheel-mode: t >> tab-bar-mode: t >> file-name-shadow-mode: t >> context-menu-mode: t >> global-font-lock-mode: t >> font-lock-mode: t >> minibuffer-regexp-mode: t >> column-number-mode: -1 >> line-number-mode: -1 >> transient-mark-mode: t >> auto-composition-mode: t >> auto-encryption-mode: t >> auto-compression-mode: t >> >> Load-path shadows: >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides >> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides >> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides >> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5 >> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-loaddef >> s /home/exec/.emacs.d/elpaca/builds/transient/transient hides >> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7b35a5 >> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transient >> >> Features: >> (shadow sort mail-extr expand-region yaml-mode-expansions >> subword-mode-expansions text-mode-expansions cc-mode-expansions >> the-org-mode-expansions python-el-fgallina-expansions >> latex-mode-expansions js2-mode-expansions js-mode-expansions >> web-mode-expansions html-mode-expansions clojure-mode-expansions >> er-basic-expansions expand-region-core expand-region-custom >> evil-collection-embark embark-org embark-consult embark gptel-curl >> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text >> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang >> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur >> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3 >> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform >> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity >> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp >> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r >> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls >> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell >> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint >> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik >> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json >> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graphql >> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futhark >> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir >> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber >> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol >> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion >> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm >> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot >> copilot-balancer editorconfig editorconfig-core editorconfig-core-handle >> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic >> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads >> consult-ag-autoloads restore-point evil-collection-atomic-chrome >> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert >> flycheck-posframe evil-collection-hungry-delete hungry-delete >> symbol-overlay keycast zig-mode reformatter empv vertico-truncate >> vertico-posframe vertico-multiform evil-collection-vertico vertico >> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo >> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict >> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-google >> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words >> superword subword evil-collection-telega telega-obsolete telega >> telega-tdlib-events telega-match telega-root telega-info telega-chat >> telega-modes telega-company telega-emoji telega-user >> telega-notifications telega-voip telega-msg telega-story telega-webpage >> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n >> telega-sort telega-filter telega-ins telega-inline telega-util >> telega-folders telega-topic telega-media telega-tdlib telega-server >> telega-core telega-customize emacsbug tab-line-nerd-icons >> evil-collection-imenu-list imenu-list tab-line rust-utils >> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo >> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack >> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext >> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header >> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base >> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam >> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id >> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam >> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal >> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e >> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts >> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg >> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark >> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders >> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars >> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mode >> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review >> pr-review-render pr-review-action magit-diff git-commit >> evil-collection-log-edit log-edit pcvs-util add-log magit-core >> magit-autorevert magit-margin magit-transient magit-process >> evil-collection-with-editor with-editor magit-mode magit-git magit-base >> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub >> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc >> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline >> lsp-rust lsp-semantic-tokens lsp-mode network-stream >> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol >> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt >> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr >> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-ement >> ement-room-list taxy-magit-section taxy ement ement-notifications >> ement-notify ement-room ewoc ement-lib ement-api ement-structs >> ement-macros dns llm-ollama llm-provider-utils llm-models >> llm-request-plz plz-event-source plz-media-type plz llm symex symex-evil >> symex-evil-support symex-hydra symex-transformations >> symex-transformations-lisp symex-utils evil-cleverparens >> evil-cleverparens-text-objects evil-cleverparens-util smartparens >> evil-surround symex-misc symex-interface-builtins symex-interface-fennel >> symex-interface-arc symex-interface-common-lisp symex-interface-clojure >> symex-interface-scheme symex-interface-racket symex-interface-elisp >> symex-interop symex-interface symex-traversals symex-dsl symex-evaluator >> symex-computations symex-primitives symex-ts symex-utils-ts >> symex-transformations-ts symex-primitives-lisp symex-data symex-ui >> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline >> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show >> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db >> elfeed-lib xml-query dired-git-info dired-hacks dired-preview >> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf >> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon >> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu >> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider >> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend >> cider-find cider-inspector cider-completion cider-profile cider-eval >> cider-jar cider-repl-history cider-repl cider-resolve cider-test >> cider-overlays cider-stacktrace cider-doc cider-browse-spec >> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common >> cider-completion-context cider-connection cider-popup sesman-browser >> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode >> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers >> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell >> chatgpt-shell-prompt-compose chatgpt-shell-perplexity >> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama >> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek >> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff >> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode >> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module >> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse >> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum >> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail >> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win >> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn >> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly >> compile-multi form-feed-st google-this echo-bar fcitx >> evil-collection-eat eat term/xterm xterm evil-collection-term term ehelp >> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util >> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex >> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach >> org-element org-persist org-id org-refile org-element-ast inline >> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode >> explain-pause-top explain-pause-log-to-socket evil-collection-profiler >> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect >> crux pest-mode popwin modus-themes blackboard-theme standard-themes >> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-theme >> iscroll xml+ evil-textobj-tree-sitter >> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core >> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get >> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg >> line-reminder ov ht fringe-helper solarized-theme solarized >> solarized-faces sqlup-mode evil-collection-bm bm zen-mode >> evil-collection-sly sly gud sly-completion sly-buttons sly-messages >> sly-common evil-collection-apropos apropos evil-collection-arc-mode >> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme >> hybrid-reverse-theme material-theme doom-themes doom-themes-base >> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme >> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-theme >> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme >> wildcharm-theme atom-one-dark-theme parchment-theme autothemer >> visual-fill-column transpose-frame gameoflife evil-collection-docker >> docker docker-context docker-volume docker-network docker-image >> docker-container docker-faces docker-core docker-compose docker-process >> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir >> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl >> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant >> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e >> notifications gntp pinentry evil-collection-hackernews hackernews >> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello >> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message >> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company >> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib >> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail >> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec >> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe >> evil-collection-consult consult clang-format apheleia apheleia-rcs >> apheleia-dp apheleia-formatters apheleia-utils apheleia-log >> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save >> evil-collection-helpful helpful cc-langs trace cl-print >> evil-collection-edebug edebug evil-collection-debug debug backtrace >> info-look evil-collection-info info help-fns radix-tree >> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common >> evil-collection-git-timemachine git-timemachine web-mode disp-table >> evil-collection-go-mode go-mode find-file evil-collection-js2-mode >> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads >> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads >> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads >> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads >> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads >> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads >> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads >> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads >> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads >> org-sliced-images-autoloads consult-org-roam-autoloads >> org-roam-autoloads org-journal-autoloads org-download-autoloads >> org-modern-autoloads orderless-autoloads mu4e-autoloads >> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads >> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads >> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads >> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads >> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads >> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads >> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads >> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloads >> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads >> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads >> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads >> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads >> ement-autoloads taxy-magit-section-autoloads taxy-autoloads >> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloads >> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads >> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads >> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads >> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads >> combobulate-go combobulate-json combobulate-yaml combobulate-css >> combobulate-js-ts combobulate-python combobulate-html combobulate-toml >> combobulate-cursor multiple-cursors mc-separate-operations >> rectangular-region-mode mc-mark-pop mc-edit-lines >> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors >> multiple-cursors-core combobulate-query savehist evil-collection-scheme >> scheme combobulate-ui combobulate-display let-alist combobulate-ztree >> combobulate-envelope combobulate-manipulation evil-collection-python >> python combobulate-procedure combobulate-navigation combobulate-misc >> combobulate-setup tempo combobulate-interface combobulate-settings >> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads >> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee >> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads >> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads >> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloads >> cape-autoloads kind-icon-autoloads svg-lib-autoloads >> corfu-terminal-autoloads popon-autoloads corfu-autoloads >> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads >> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads >> clojure-mode-autoloads queue-autoloads spinner-autoloads >> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads >> cargo-jump-xref-autoloads breadcrumb-autoloads >> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads >> parseedn-autoloads parseclj-autoloads aidermacs-autoloads >> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads >> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads >> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads >> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloads >> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads >> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads >> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads >> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads >> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads >> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads >> modus-themes-autoloads blackboard-theme-autoloads >> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads >> danneskjold-theme-autoloads srcery-theme-autoloads >> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads >> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads >> evil-numbers-autoloads ctable-autoloads color-rg-autoloads >> line-reminder-autoloads fringe-helper-autoloads ov-autoloads >> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads >> zen-mode-autoloads sly-autoloads expand-region-autoloads >> highlight-defined-autoloads base16-theme-autoloads >> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads >> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads >> organic-green-theme-autoloads inkpot-theme-autoloads >> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads >> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloads >> mindre-theme-autoloads kaolin-themes-autoloads >> tron-legacy-theme-autoloads wildcharm-theme-autoloads >> atom-one-dark-theme-autoloads parchment-theme-autoloads >> autothemer-autoloads visual-fill-column-autoloads >> transpose-frame-autoloads gameoflife-autoloads docker-autoloads >> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads >> cus-dir-autoloads dumb-jump-autoloads popup-autoloads >> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads >> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads >> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads >> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads >> consult-autoloads clang-format-autoloads apheleia-autoloads >> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads >> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads >> websocket-autoloads restore-point-autoloads ace-window-autoloads >> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads >> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads >> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads >> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key >> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref >> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C >> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp >> org-macro org-src evil-collection-sh-script sh-script executable >> ob-comint org-pcomplete org-list org-footnote org-faces org-entities >> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold >> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs >> molecule-mode lsp hyperbole hideshow gptel-manual-complete >> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck >> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs >> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff >> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop >> frameset server evil-collection-eww eww vtable mule-util url-queue >> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file >> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recentf >> tree-widget winner edit-list refine loop list-utils prompts file-info >> browse-at-remote f image-roll evil-collection-image image-mode exif >> toc-mode rst scratch sql evil-collection-view view persistent-scratch >> exercism persist async-await iter2 generator promise url-http url-auth >> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw >> nsm promise-rejection-tracking promise-finally promise-done >> promise-es6-extensions promise-core async request mailheader mail-utils >> a indent-bars evil-collection-outline noutline outline mode-line-bell >> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep >> evil-collection-wgrep wgrep evil-collection-grep grep >> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line >> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data >> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon >> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon >> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon >> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus >> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory >> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel >> evil-collection-bookmark bookmark evil-collection-tablist tablist >> tablist-filter semantic/wisent/comp semantic/wisent >> semantic/wisent/wisent semantic/util-modes semantic/util semantic >> semantic/tag semantic/lex semantic/fw mode-local find-func cedet >> libmpdel tq time-stamp posframe esup esup-child benchmark >> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit >> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine >> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode >> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-store >> evil-collection-magit-section magit-section cursor-sensor llama nix-log >> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver >> tramp-integration tramp-message tramp-compat shell pcomplete parse-time >> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathjax >> evil-terminal-cursor-changer evil-visualstar evil-commentary >> evil-commentary-integration evil-collection-evil-mc evil-mc >> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make >> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars >> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args >> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired >> evil-collection-vc-git evil-collection-tabulated-list >> evil-collection-tab-bar evil-collection-simple evil-collection-replace >> evil-collection-process-menu evil-collection-package-menu >> evil-collection-minibuffer evil-collection-man evil-collection-kmacro >> evil-collection-indent evil-collection-imenu evil-collection-help >> evil-collection-flymake evil-collection-elisp-mode evil-collection-eldoc >> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode >> evil-collection-custom evil-collection-compile evil-collection-comint >> evil-collection-calendar evil-collection-buff-menu evil-collection >> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes >> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill >> kinsoku url-file puny svg dom preview latex latex-flymake flymake >> project compile text-property-search comint ansi-osc tex-ispell >> tex-style tex dbus xml crm texmathp auctex display-line-numbers >> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color >> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloads >> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads >> browse-at-remote-autoloads image-roll-autoloads >> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads >> scratch-autoloads persistent-scratch-autoloads exercism-autoloads >> a-autoloads request-autoloads async-autoloads async-await-autoloads >> promise-autoloads iter2-autoloads persist-autoloads >> indent-bars-autoloads rainbow-delimiters-autoloads >> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloads >> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads >> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads >> nerd-icons-dired-autoloads nerd-icons-completion-autoloads >> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads >> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads >> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads >> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads >> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads >> toml-mode-autoloads highlight-escape-sequences-autoloads >> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads >> nix-mode-autoloads magit-section-autoloads llama-autoloads >> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads >> s-autoloads devdocs-autoloads mathjax-autoloads >> evil-terminal-cursor-changer-autoloads evil-surround-autoloads >> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads >> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads >> smartscan-autoloads timeout-autoloads ess-autoloads >> info-colors-autoloads evil-collection-autoloads annalist-autoloads >> sqlite3-autoloads treebundel-autoloads git-link-autoloads >> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispell >> which-func imenu man ansi-color autorevert filenotify cal-menu calendar >> cal-loaddefs advice evil evil-integration evil-maps evil-commands reveal >> evil-jumps evil-command-window evil-types evil-search evil-ex >> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings >> comp-run comp-common rx evil-common thingatpt rect evil-vars ring >> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads >> transient pcase format-spec transient-autoloads general memoize >> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color >> minions compat general-autoloads memoize-autoloads >> color-theme-sanityinc-tomorrow-autoloads minions-autoloads >> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc >> vc-dispatcher cl-extra help-mode elpaca-use-package use-package >> use-package-ensure use-package-delight use-package-diminish >> use-package-bind-key bind-key easy-mmode use-package-core >> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa >> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods >> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse >> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x >> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org >> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load >> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc >> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode >> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd >> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace >> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar >> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock >> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq >> simple cl-generic indonesian philippine cham georgian utf-8-lang >> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms >> cp51932 hebrew greek romanian slovak czech european ethiopic indian >> cyrillic chinese composite emoji-zwj charscript charprop case-table >> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button >> loaddefs theme-loaddefs faces cus-face macroexp files window >> text-properties overlay sha1 md5 base64 format env code-pages mule >> custom widget keymap hashtable-print-readable backquote threads dbusbind >> inotify dynamic-setting system-font-setting font-render-setting cairo >> gtk pgtk lcms2 multi-tty move-toolbar make-network-process >> tty-child-frames native-compile mps emacs) >> >> Memory information: >> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0) >> (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0) >> (buffers 1000 0)) > From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 20 04:17:55 2025 Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 08:17:55 +0000 Received: from localhost ([127.0.0.1]:44892 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6PsB-0005mn-57 for submit@debbugs.gnu.org; Sun, 20 Apr 2025 04:17:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43102) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6Ps8-0005mV-Lo for 77914@debbugs.gnu.org; Sun, 20 Apr 2025 04:17:53 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u6Ps2-00050K-Qo; Sun, 20 Apr 2025 04:17:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=YUwyfiEDtzXvOE4+CZFuL5yjwAKaYo6fnju/S4mN768=; b=UdFxCDSedEke lQ8KUXfozFc4Esj6zMrCGftxDIXElR1DDHY+bH+ths6A420LdCD1ZWPNStLsanWVKTDllAzv9DqxY wEpsqPKpbib528YuEaLSJoXox4dyoshPeHjBl/7TJx8l2MuYfawg4J9WZb4V1Q6fpnm03Gb3LJGj1 sNWCUBIIxIPshwiNdObjthO5vtS5vMETOsi8BiOlRm3mudxBHHmL5Z5+HUFAW/W8MhU1BRfXLiSEn 4W3IWHRpOF1AFPxwH/iVbfsBFdq1APpPUdM7Q/CT8b7gjttswl43VihkyH/+KAMJndXt7GlOb+adv q0UoNKY+nMOuiCQ7IvqzuQ==; Date: Sun, 20 Apr 2025 11:17:44 +0300 Message-Id: <865xiz6yc7.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov In-Reply-To: <87mscbe5a8.fsf@mail.linkov.net> (message from Juri Linkov on Sun, 20 Apr 2025 09:15:51 +0300) Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> <87mscbe5a8.fsf@mail.linkov.net> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 77914 Cc: execvy@gmail.com, v.pupillo@gmail.com, 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: Eval Exec , 77914@debbugs.gnu.org > From: Juri Linkov > Date: Sun, 20 Apr 2025 09:15:51 +0300 > > > If the attached file is correct, it appears to be a grammar bug (the tree- > > sitter-rust grammar). Take a look at the attached screenshot (libtree- > > sitter-0.25.2 and tree-sitter-rust v0.24.0) > > Maybe this is related to Rust grammar version mismatch > where the current rust-ts-mode works only with > tree-sitter-rust v0.23.0: > > https://lists.gnu.org/archive/html/emacs-devel/2025-04/msg00430.html If this is the reason, it would be good to adapt rust-ts-mode to a newer grammar version. From debbugs-submit-bounces@debbugs.gnu.org Sun Apr 20 05:29:17 2025 Received: (at 77914) by debbugs.gnu.org; 20 Apr 2025 09:29:17 +0000 Received: from localhost ([127.0.0.1]:45009 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6QzE-0000ne-OZ for submit@debbugs.gnu.org; Sun, 20 Apr 2025 05:29:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36790) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6QzD-0000nP-Ch for 77914@debbugs.gnu.org; Sun, 20 Apr 2025 05:29:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u6Qz8-0004sj-3i; Sun, 20 Apr 2025 05:29:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=luoh+FL9qh0vNn7c/w0bLf0B1vMA5ShllzPK7wtDzWc=; b=j5/zwrQPO/od 8M1jqc2F91NKaUEhcZpCvNXEJKgTpK/B1SvZdok2vGh+gN2eUdmeixZR91ktgRFQF8u9aleLCQc+B 8/4ulN4V324giiJTYeUsse3QFHLzAUMgl4Pl/Pj8gHVOpnO6XiziLPWPkTovDuQSiom/fiyO5oq02 sLkzgOtfDOWqfjod2kXkk68Np1JYHiEtKNhrkvAc9E4WunTIuQxq20gaDhE6KPuaQzOF3870j/T9j GC8BsLD6a+cJxWc63s8UrfE10tTWX8uK0+Ml0nYlyAuGNtIE9CHFIfM2QJMztUhn0g0Z4GRTvvFcC 8K6kl84qWbjE7bxkNjxSPw==; Date: Sun, 20 Apr 2025 12:29:07 +0300 Message-Id: <86wmbf5ggs.fsf@gnu.org> From: Eli Zaretskii To: Eval Exec In-Reply-To: <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> (message from Eval Exec on Sun, 20 Apr 2025 15:19:20 +0800) Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 77914 Cc: v.pupillo@gmail.com, 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Date: Sun, 20 Apr 2025 15:19:20 +0800 > From: Eval Exec > > Oh! In the reproduce step, I write a typo, the bug can be reproduced by > setting different `treesit-font-lock-level`, wen > `treesit-font-lock-level` is 3, all colors are good, when > treesit-font-lock-level is 4, all colors are lost. > To reproduce this: use this rust file: > > Then eval: > 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost. > > 2. (progn (setq treesit-font-lock-level 3) (revert-buffer)) > colors are good. !Important, level 3 is good, but level 4 lost colors. > > 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost again. Don't use setq, use setopt. treesit-font-lock-level is a defcustom, and it has a setter function. From debbugs-submit-bounces@debbugs.gnu.org Mon Apr 21 17:21:47 2025 Received: (at submit) by debbugs.gnu.org; 21 Apr 2025 21:21:47 +0000 Received: from localhost ([127.0.0.1]:39717 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u6yaI-0007xA-VR for submit@debbugs.gnu.org; Mon, 21 Apr 2025 17:21:47 -0400 Received: from lists.gnu.org ([2001:470:142::17]:45144) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u6yaC-0007wW-5N for submit@debbugs.gnu.org; Mon, 21 Apr 2025 17:21:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1u6ya6-0003Vx-OE for bug-gnu-emacs@gnu.org; Mon, 21 Apr 2025 17:21:34 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1u6ya1-0007Tb-Ak; Mon, 21 Apr 2025 17:21:34 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-43d0618746bso33548655e9.2; Mon, 21 Apr 2025 14:21:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745270487; x=1745875287; darn=gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pwYoTkpIEsn4/01DVY89E7TUw2gQQdkPe0eJrBTYmLk=; b=ApE9vAVbFdqz8DtLAti7k2aL2hreAAdqZBDFPdntEXhqH/OdAzkvsLXLdUUnIcAcsK L2yVXhnozkO9c+O+5Blluqa7zT66Ne/GLMM8jiCFkWgzuC8qIAg39Pi6jsl7DxLVGimP uy1J+ZnRs1bizQvAAIVCjCaJAw6Hm+wfQNDx0EQCqRVi/UanoA+AfFnOIbzD1PZGM5Ea pLftoF1PDBtHV9pNg7BozX8Du/Ok2Fy4RDCr/lV41UkU+yzrzoDSMETavOMVlUnXz09i d0oUMJRC57ptAh3VqP3fhMciWpzo4ItLN9ebLHaQD7wQ0WFQKfV2VCxSi7gDsFNgqw84 8d4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745270487; x=1745875287; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pwYoTkpIEsn4/01DVY89E7TUw2gQQdkPe0eJrBTYmLk=; b=Ux5d/1lPn2d5SLBCTR5Sdm6+hAmlTXvgQMkjsYFUYnmO7RbItLwTph0Nkb5US2qS+5 38mifbShtZ/v57f81pQStey8MdWQt4dvV/NwvB8w3KDNmeP/UOPirVW7TPd29SyNlRMF fpa0vmwuSXpLTa+FYcVkCma8C4dCWk7/Bm+M3SoZ9x0laKB6fbNpckLVY2B3N2NN4O3m 3Bz6el2FKbX9LFyp11g6s4/AMOZzrOD4zRH5KwrrBZkvr8VdGODO91ZCautwd8vzyAEf UISBy1yAD9/8LeDXzmvt/WAqXrqUTX/naqPOQKeThWgA9mQYVH5XXNg01MkHtxlSoGCF eZYw== X-Forwarded-Encrypted: i=1; AJvYcCWF4lWxUfw7Tzua3gW4OuJVzauHQtTbGbzptR7RBoGZi9WQ7Moy3JrA1HEQpFZg44FIudMF5YScy32mvlgs@gnu.org, AJvYcCWpUUhos+nh5WLmXSpLZ2DqR8RlLOaIV2pI1G/TwYFdMkODqbujHsJ8NSDTGh67+pcMLSj9zw==@gnu.org X-Gm-Message-State: AOJu0YyIW24ir+xNQWDjV98EWKpLrvvEDsRW7OABJbQanCwGkVA6xwjG U+3yVWEBqlO0YaPtFo78WvtnKxJ8kFeP7Zxsoph0+ZEHN0454toA X-Gm-Gg: ASbGnctzOwRiwwj5e3z+nd6skrzINuMCuaCgCOxgGM0a+9oTbWuiLuwzVIXVqdzzObI /zkKPEJvSc4N9ogs17I1FT67XiabcupTVKJrGwyh44yEi8FbK9GLecvriUS7zQUpXc1h6xqliKc 3ht7hgXIrW4yIbsKCdxrTe6g679lbFSmtHT1VKar6XOTyMj/LgffnYWOc9rKZcvVWR3nqFE807C +cDYr7caaudlbWJOacCrKq1snUKGQh02kTT3pchzeYDD6am3ipHyoSiQOWfalwuzkrZLaZJx9zC KKIUNJzEeXk3eGDuZ1QD+KWjtzMVDjECLBfkX1kqKasdDIEAsrMNkqwRu+UP2LguiZ+EyBNU3zS hTZzs X-Google-Smtp-Source: AGHT+IFk6Im311mueWkbeo64jvcijO1AtmY6pfW2GTuzq7Aspja239jUBf+nsNoKzFi5/lPxVY+wpw== X-Received: by 2002:a05:600c:3c87:b0:43d:ea:51d2 with SMTP id 5b1f17b1804b1-4406aba2c6cmr123250435e9.14.1745270486137; Mon, 21 Apr 2025 14:21:26 -0700 (PDT) Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it. [2.230.139.124]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4406d5a9e01sm150959915e9.4.2025.04.21.14.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Apr 2025 14:21:24 -0700 (PDT) From: Vincenzo Pupillo To: 77914@debbugs.gnu.org, bug-gnu-emacs@gnu.org, Eval Exec , Juri Linkov , Eli Zaretskii Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color Date: Mon, 21 Apr 2025 23:21:23 +0200 Message-ID: <7129720.9J7NaK4W3v@fedora> In-Reply-To: <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart9866453.eNJFYEL58v" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=2a00:1450:4864:20::32b; envelope-from=v.pupillo@gmail.com; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --nextPart9866453.eNJFYEL58v Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Yes, I did exactly the same steps. I lost all the colors in level 4 only because all the text is colored with = the=20 `font-lock-waning-face' (see the attached screenshot). This is because tree- sitter-rust indicates several nodes as ERROR, as shown in the tree-sitter- explorer window. rust-ts-mode has a rule that should color the nodes indica= ted=20 with ERROR with `font-lock-warning-face', however it colors the whole buffe= r. If I look at a less complex example the colors are all there. I can try and write a tighter rule that doesn't color the whole buffer with= =20 font-lock-warning-face'. Vincenzo p.s. for Eli and Jury: I'm using libtreesitter-0.25.2 and tree-sitter-rust= =20 v0.24.0 (Fedora 42) In data domenica 20 aprile 2025 09:19:20 Ora legale dell=E2=80=99Europa cen= trale, Eval=20 Exec ha scritto: > Oh! In the reproduce step, I write a typo, the bug can be reproduced by > setting different `treesit-font-lock-level`, wen > `treesit-font-lock-level` is 3, all colors are good, when > treesit-font-lock-level is 4, all colors are lost. > To reproduce this: use this rust file: >=20 > Then eval: > 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost. >=20 > 2. (progn (setq treesit-font-lock-level 3) (revert-buffer)) > colors are good. !Important, level 3 is good, but level 4 lost colors. >=20 > 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost again. >=20 >=20 > Can you reproduce this? >=20 > On 4/20/25 06:12, Vincenzo Pupillo wrote: > > If the attached file is correct, it appears to be a grammar bug (the tr= ee- > > sitter-rust grammar). Take a look at the attached screenshot (libtree- > > sitter-0.25.2 and tree-sitter-rust v0.24.0) > >=20 > > Vincenzo > >=20 > > In data sabato 19 aprile 2025 07:10:57 Ora legale dell=E2=80=99Europa c= entrale, > > Eval>=20 > > Exec ha scritto: > >> Hello, > >> I'm visiting a rust file, when I set treesit-font-lock-level to 3, all > >> color are good, when I set treesit-font-lock-level to 4, all color as > >> lost. > >> To reproduce this: use this rust file: > >>=20 > >> Then eval: > >> 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > >> all color are lost. > >>=20 > >> 2. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > >> colors are good. > >>=20 > >> 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > >> all color are lost again. > >>=20 > >>=20 > >> ```rust > >>=20 > >> //! Primitive traits and types representing basic properties of types. > >> //! > >> //! Rust types can be classified in various useful ways according to > >> //! their intrinsic properties. These classifications are represented > >> //! as traits. > >>=20 > >> #![stable(feature =3D "rust1", since =3D "1.0.0")] > >>=20 > >> use crate::cell::UnsafeCell; > >> use crate::cmp; > >> use crate::fmt::Debug; > >> use crate::hash::{Hash, Hasher}; > >>=20 > >> /// Implements a given marker trait for multiple types at the same tim= e. > >> /// > >> /// The basic syntax looks like this: > >> /// ```ignore private macro > >> /// marker_impls! { MarkerTrait for u8, i8 } > >> /// ``` > >> /// You can also implement `unsafe` traits > >> /// ```ignore private macro > >> /// marker_impls! { unsafe MarkerTrait for u8, i8 } > >> /// ``` > >> /// Add attributes to all impls: > >> /// ```ignore private macro > >> /// marker_impls! { > >> /// #[allow(lint)] > >> /// #[unstable(feature =3D "marker_trait", issue =3D "none")] > >> /// MarkerTrait for u8, i8 > >> /// } > >> /// ``` > >> /// And use generics: > >> /// ```ignore private macro > >> /// marker_impls! { > >> /// MarkerTrait for > >> /// u8, i8, > >> /// {T: ?Sized} *const T, > >> /// {T: ?Sized} *mut T, > >> /// {T: MarkerTrait} PhantomData, > >> /// u32, > >> /// } > >> /// ``` > >> #[unstable(feature =3D "internal_impls_macro", issue =3D "none")] > >> // Allow implementations of `UnsizedConstParamTy` even though std cann= ot > >> use that feature. #[allow_internal_unstable(unsized_const_params)] > >> macro marker_impls { > >>=20 > >> ( $(#[$($meta:tt)*])* $Trait:ident for $({$($bounds:tt)*})? $T:ty > >> $(, > >>=20 > >> $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* impl< $($($bounds)*)? > $Trai= t for > >> $T {} > >>=20 > >> marker_impls! { $(#[$($meta)*])* $Trait for $($($rest)*)? } > >> =20 > >> }, > >> ( $(#[$($meta:tt)*])* $Trait:ident for ) =3D> {}, > >> =20 > >> ( $(#[$($meta:tt)*])* unsafe $Trait:ident for $({$($bounds:tt)*})? > >> $T:ty > >>=20 > >> $(, $($rest:tt)*)? ) =3D> { $(#[$($meta)*])* unsafe impl< $($($bounds)= *)? > > >> $Trait for $T {} marker_impls! { $(#[$($meta)*])* unsafe $Trait for > >> $($($rest)*)? } }, > >>=20 > >> ( $(#[$($meta:tt)*])* unsafe $Trait:ident for ) =3D> {}, > >>=20 > >> } > >>=20 > >> /// Types that can be transferred across thread boundaries. > >> /// > >> /// This trait is automatically implemented when the compiler determin= es > >> it's /// appropriate. > >> /// > >> /// An example of a non-`Send` type is the reference-counting pointer > >> /// [`rc::Rc`][`Rc`]. If two threads attempt to clone [`Rc`]s that poi= nt > >> to > >> the same /// reference-counted value, they might try to update the > >> reference count at the /// same time, which is [undefined behavior][ub] > >> because [`Rc`] doesn't use atomic /// operations. Its cousin > >> [`sync::Arc`][arc] does use atomic operations (incurring /// some > >> overhead) > >> and thus is `Send`. > >> /// > >> /// See [the Nomicon](../../nomicon/send-and-sync.html) and the [`Sync= `] > >> trait for more details. /// > >> /// [`Rc`]: ../../std/rc/struct.Rc.html > >> /// [arc]: ../../std/sync/struct.Arc.html > >> /// [ub]: ../../reference/behavior-considered-undefined.html > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Send")] > >> #[diagnostic::on_unimplemented( > >>=20 > >> message =3D "`{Self}` cannot be sent between threads safely", > >> label =3D "`{Self}` cannot be sent between threads safely" > >>=20 > >> )] > >> pub unsafe auto trait Send { > >>=20 > >> // empty. > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl !Send for *const T {} > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl !Send for *mut T {} > >>=20 > >> // Most instances arise automatically, but this instance is needed to > >> link > >> up `T: Sync` with // `&T: Send` (and it also removes the unsound defau= lt > >> instance `T Send` -> `&T: Send` that would // otherwise exist). > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> unsafe impl Send for &T {} > >>=20 > >> /// Types with a constant size known at compile time. > >> /// > >> /// All type parameters have an implicit bound of `Sized`. The special > >> syntax /// `?Sized` can be used to remove this bound if it's not > >> appropriate. /// > >> /// ``` > >> /// # #![allow(dead_code)] > >> /// struct Foo(T); > >> /// struct Bar(T); > >> /// > >> /// // struct FooUse(Foo<[i32]>); // error: Sized is not implemented f= or > >> [i32] /// struct BarUse(Bar<[i32]>); // OK > >> /// ``` > >> /// > >> /// The one exception is the implicit `Self` type of a trait. A trait > >> does > >> not /// have an implicit `Sized` bound as this is incompatible with > >> [trait > >> object]s /// where, by definition, the trait needs to work with all > >> possible implementors, /// and thus could be any size. > >> /// > >> /// Although Rust will let you bind `Sized` to a trait, you won't > >> /// be able to use it to form a trait object later: > >> /// > >> /// ``` > >> /// # #![allow(unused_variables)] > >> /// trait Foo { } > >> /// trait Bar: Sized { } > >> /// > >> /// struct Impl; > >> /// impl Foo for Impl { } > >> /// impl Bar for Impl { } > >> /// > >> /// let x: &dyn Foo =3D &Impl; // OK > >> /// // let y: &dyn Bar =3D &Impl; // error: the trait `Bar` cannot > >> /// // be made into an object > >> /// ``` > >> /// > >> /// [trait object]: ../../book/ch17-02-trait-objects.html > >> #[doc(alias =3D "?", alias =3D "?Sized")] > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> #[lang =3D "sized"] > >> #[diagnostic::on_unimplemented( > >>=20 > >> message =3D "the size for values of type `{Self}` cannot be known= at > >>=20 > >> compilation time", label =3D "doesn't have a size known at compile-tim= e" > >> )] > >> #[fundamental] // for Default, for example, which requires that `[T]: > >> !Default` be evaluatable #[rustc_specialization_trait] > >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> #[rustc_coinductive] > >> pub trait Sized { > >>=20 > >> // Empty. > >>=20 > >> } > >>=20 > >> /// Types that can be "unsized" to a dynamically-sized type. > >> /// > >> /// For example, the sized array type `[i8; 2]` implements `Unsize<[i8= ]>` > >> and /// `Unsize`. > >> /// > >> /// All implementations of `Unsize` are provided automatically by the > >> compiler. /// Those implementations are: > >> /// > >> /// - Arrays `[T; N]` implement `Unsize<[T]>`. > >> /// - A type implements `Unsize` if all of these > >> conditions > >> are met: /// - The type implements `Trait`. > >> /// - `Trait` is dyn-compatible[^1]. > >> /// - The type is sized. > >> /// - The type outlives `'a`. > >> /// - Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize >> ..., Un, ...>>` /// where any number of (type and const) parameters may > >> be > >> changed if all of these conditions /// are met: > >> /// - Only the last field of `Foo` has a type involving the paramete= rs > >> `T1`, ..., `Tn`. /// - All other parameters of the struct are equal. > >> /// - `Field: Unsize>`, where > >> `Field<...>` stands for the actual /// type of the struct's last > >> field. > >> /// > >> /// `Unsize` is used along with [`ops::CoerceUnsized`] to allow > >> /// "user-defined" containers such as [`Rc`] to contain dynamically-si= zed > >> /// types. See the [DST coercion RFC][RFC982] and [the nomicon entry on > >> coercion][nomicon-coerce] /// for more details. > >> /// > >> /// [`ops::CoerceUnsized`]: crate::ops::CoerceUnsized > >> /// [`Rc`]: ../../std/rc/struct.Rc.html > >> /// [RFC982]: > >> https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md > >> /// > >> [nomicon-coerce]: ../../nomicon/coercions.html > >> /// [^1]: Formerly known as *object safe*. > >> #[unstable(feature =3D "unsize", issue =3D "18598")] > >> #[lang =3D "unsize"] > >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> pub trait Unsize { > >>=20 > >> // Empty. > >>=20 > >> } > >>=20 > >> /// Required trait for constants used in pattern matches. > >> /// > >> /// Any type that derives `PartialEq` automatically implements this > >> trait, > >> /// *regardless* of whether its type-parameters implement `PartialEq`. > >> /// > >> /// If a `const` item contains some type that does not implement this > >> trait, /// then that type either (1.) does not implement `PartialEq` > >> (which means the /// constant will not provide that comparison method, > >> which code generation /// assumes is available), or (2.) it implements > >> *its own* version of /// `PartialEq` (which we assume does not conform > >> to a > >> structural-equality /// comparison). > >> /// > >> /// In either of the two scenarios above, we reject usage of such a > >> constant in /// a pattern match. > >> /// > >> /// See also the [structural match RFC][RFC1445], and [issue 63438] wh= ich > >> /// motivated migrating from an attribute-based design to this trait. > >> /// > >> /// [RFC1445]: > >> https://github.com/rust-lang/rfcs/blob/master/text/1445-restrict-const= ant > >> s-> in-patterns.md /// [issue 63438]: > >> https://github.com/rust-lang/rust/issues/63438 > >> #[unstable(feature =3D "structural_match", issue =3D "31434")] > >> #[diagnostic::on_unimplemented(message =3D "the type `{Self}` does not > >> `#[derive(PartialEq)]`")] #[lang =3D "structural_peq"] > >> pub trait StructuralPartialEq { > >>=20 > >> // Empty. > >>=20 > >> } > >>=20 > >> marker_impls! { > >>=20 > >> #[unstable(feature =3D "structural_match", issue =3D "31434")] > >> StructuralPartialEq for > >> =20 > >> usize, u8, u16, u32, u64, u128, > >> isize, i8, i16, i32, i64, i128, > >> bool, > >> char, > >> str /* Technically requires `[u8]: StructuralPartialEq` */, > >> (), > >> {T, const N: usize} [T; N], > >> {T} [T], > >> {T: ?Sized} &T, > >>=20 > >> } > >>=20 > >> /// Types whose values can be duplicated simply by copying bits. > >> /// > >> /// By default, variable bindings have 'move semantics.' In other > >> /// words: > >> /// > >> /// ``` > >> /// #[derive(Debug)] > >> /// struct Foo; > >> /// > >> /// let x =3D Foo; > >> /// > >> /// let y =3D x; > >> /// > >> /// // `x` has moved into `y`, and so cannot be used > >> /// > >> /// // println!("{x:?}"); // error: use of moved value > >> /// ``` > >> /// > >> /// However, if a type implements `Copy`, it instead has 'copy > >> semantics': > >> /// > >> /// ``` > >> /// // We can derive a `Copy` implementation. `Clone` is also required, > >> as > >> it's /// // a supertrait of `Copy`. > >> /// #[derive(Debug, Copy, Clone)] > >> /// struct Foo; > >> /// > >> /// let x =3D Foo; > >> /// > >> /// let y =3D x; > >> /// > >> /// // `y` is a copy of `x` > >> /// > >> /// println!("{x:?}"); // A-OK! > >> /// ``` > >> /// > >> /// It's important to note that in these two examples, the only > >> difference > >> is whether you /// are allowed to access `x` after the assignment. Und= er > >> the hood, both a copy and a move /// can result in bits being copied in > >> memory, although this is sometimes optimized away. /// > >> /// ## How can I implement `Copy`? > >> /// > >> /// There are two ways to implement `Copy` on your type. The simplest = is > >> to > >> use `derive`: /// > >> /// ``` > >> /// #[derive(Copy, Clone)] > >> /// struct MyStruct; > >> /// ``` > >> /// > >> /// You can also implement `Copy` and `Clone` manually: > >> /// > >> /// ``` > >> /// struct MyStruct; > >> /// > >> /// impl Copy for MyStruct { } > >> /// > >> /// impl Clone for MyStruct { > >> /// fn clone(&self) -> MyStruct { > >> /// *self > >> /// } > >> /// } > >> /// ``` > >> /// > >> /// There is a small difference between the two. The `derive` strategy > >> will > >> also place a `Copy` /// bound on type parameters: > >> /// > >> /// ``` > >> /// #[derive(Clone)] > >> /// struct MyStruct(T); > >> /// > >> /// impl Copy for MyStruct { } > >> /// ``` > >> /// > >> /// This isn't always desired. For example, shared references (`&T`) c= an > >> be > >> copied regardless of /// whether `T` is `Copy`. Likewise, a generic > >> struct > >> containing markers such as [`PhantomData`] /// could potentially be > >> duplicated with a bit-wise copy. > >> /// > >> /// ## What's the difference between `Copy` and `Clone`? > >> /// > >> /// Copies happen implicitly, for example as part of an assignment `y = =3D > >> x`. > >> The behavior of /// `Copy` is not overloadable; it is always a simple > >> bit-wise copy. /// > >> /// Cloning is an explicit action, `x.clone()`. The implementation of > >> [`Clone`] can /// provide any type-specific behavior necessary to > >> duplicate > >> values safely. For example, /// the implementation of [`Clone`] for > >> [`String`] needs to copy the pointed-to string /// buffer in the heap.= A > >> simple bitwise copy of [`String`] values would merely copy the /// > >> pointer, > >> leading to a double free down the line. For this reason, [`String`] is > >> [`Clone`] /// but not `Copy`. > >> /// > >> /// [`Clone`] is a supertrait of `Copy`, so everything which is `Copy` > >> must > >> also implement /// [`Clone`]. If a type is `Copy` then its [`Clone`] > >> implementation only needs to return `*self` /// (see the example above= ). > >> /// > >> /// ## When can my type be `Copy`? > >> /// > >> /// A type can implement `Copy` if all of its components implement > >> `Copy`. > >> For example, this /// struct can be `Copy`: > >> /// > >> /// ``` > >> /// # #[allow(dead_code)] > >> /// #[derive(Copy, Clone)] > >> /// struct Point { > >> /// x: i32, > >> /// y: i32, > >> /// } > >> /// ``` > >> /// > >> /// A struct can be `Copy`, and [`i32`] is `Copy`, therefore `Point` is > >> eligible to be `Copy`. /// By contrast, consider > >> /// > >> /// ``` > >> /// # #![allow(dead_code)] > >> /// # struct Point; > >> /// struct PointList { > >> /// points: Vec, > >> /// } > >> /// ``` > >> /// > >> /// The struct `PointList` cannot implement `Copy`, because [`Vec`]= is > >> not `Copy`. If we /// attempt to derive a `Copy` implementation, we'll > >> get > >> an error: /// > >> /// ```text > >> /// the trait `Copy` cannot be implemented for this type; field `point= s` > >> does not implement `Copy` /// ``` > >> /// > >> /// Shared references (`&T`) are also `Copy`, so a type can be `Copy`, > >> even > >> when it holds /// shared references of types `T` that are *not* `Copy`. > >> Consider the following struct, /// which can implement `Copy`, because= it > >> only holds a *shared reference* to our non-`Copy` /// type `PointList` > >> from > >> above: > >> /// > >> /// ``` > >> /// # #![allow(dead_code)] > >> /// # struct PointList; > >> /// #[derive(Copy, Clone)] > >> /// struct PointListWrapper<'a> { > >> /// point_list_ref: &'a PointList, > >> /// } > >> /// ``` > >> /// > >> /// ## When *can't* my type be `Copy`? > >> /// > >> /// Some types can't be copied safely. For example, copying `&mut T` > >> would > >> create an aliased /// mutable reference. Copying [`String`] would > >> duplicate > >> responsibility for managing the /// [`String`]'s buffer, leading to a > >> double free. > >> /// > >> /// Generalizing the latter case, any type implementing [`Drop`] can't= be > >> `Copy`, because it's /// managing some resource besides its own > >> [`size_of::`] bytes. /// > >> /// If you try to implement `Copy` on a struct or enum containing > >> non-`Copy` data, you will get /// the error [E0204]. > >> /// > >> /// [E0204]: ../../error_codes/E0204.html > >> /// > >> /// ## When *should* my type be `Copy`? > >> /// > >> /// Generally speaking, if your type _can_ implement `Copy`, it should. > >> Keep in mind, though, /// that implementing `Copy` is part of the publ= ic > >> API of your type. If the type might become /// non-`Copy` in the futur= e, > >> it could be prudent to omit the `Copy` implementation now, to /// avoid > >> a breaking API change. > >> /// > >> /// ## Additional implementors > >> /// > >> /// In addition to the [implementors listed below][impls], > >> /// the following types also implement `Copy`: > >> /// > >> /// * Function item types (i.e., the distinct types defined for each > >> function) /// * Function pointer types (e.g., `fn() -> i32`) > >> /// * Closure types, if they capture no value from the environment > >> /// or if all such captured values implement `Copy` themselves. > >> /// Note that variables captured by shared reference always implement > >> `Copy` /// (even if the referent doesn't), > >> /// while variables captured by mutable reference never implement > >> `Copy`. > >> /// > >> /// [`Vec`]: ../../std/vec/struct.Vec.html > >> /// [`String`]: ../../std/string/struct.String.html > >> /// [`size_of::`]: crate::mem::size_of > >> /// [impls]: #implementors > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> #[lang =3D "copy"] > >> // FIXME(matthewjasper) This allows copying a type that doesn't implem= ent > >> // `Copy` because of unsatisfied lifetime bounds (copying `A<'_>` when > >> only > >> // `A<'static>: Copy` and `A<'_>: Clone`). > >> // We have this attribute here for now only because there are quite a = few > >> // existing specializations on `Copy` that already exist in the standa= rd > >> // library, and there's no way to safely have this behavior right now. > >> #[rustc_unsafe_specialization_marker] > >> #[rustc_diagnostic_item =3D "Copy"] > >> pub trait Copy: Clone { > >>=20 > >> // Empty. > >>=20 > >> } > >>=20 > >> /// Derive macro generating an impl of the trait `Copy`. > >> #[rustc_builtin_macro] > >> #[stable(feature =3D "builtin_macro_prelude", since =3D "1.38.0")] > >> #[allow_internal_unstable(core_intrinsics, derive_clone_copy)] > >> pub macro Copy($item:item) { > >>=20 > >> /* compiler built-in */ > >>=20 > >> } > >>=20 > >> // Implementations of `Copy` for primitive types. > >> // > >> // Implementations that cannot be described in Rust > >> // are implemented in `traits::SelectionContext::copy_clone_conditions= ()` > >> // in `rustc_trait_selection`. > >> marker_impls! { > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> Copy for > >> =20 > >> usize, u8, u16, u32, u64, u128, > >> isize, i8, i16, i32, i64, i128, > >> f16, f32, f64, f128, > >> bool, char, > >> {T: ?Sized} *const T, > >> {T: ?Sized} *mut T, > >>=20 > >> } > >>=20 > >> #[unstable(feature =3D "never_type", issue =3D "35121")] > >> impl Copy for ! {} > >>=20 > >> /// Shared references can be copied, but mutable references *cannot*! > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl Copy for &T {} > >>=20 > >> /// Types for which it is safe to share references between threads. > >> /// > >> /// This trait is automatically implemented when the compiler determin= es > >> /// it's appropriate. > >> /// > >> /// The precise definition is: a type `T` is [`Sync`] if and only if `= &T` > >> is /// [`Send`]. In other words, if there is no possibility of > >> /// [undefined behavior][ub] (including data races) when passing > >> /// `&T` references between threads. > >> /// > >> /// As one would expect, primitive types like [`u8`] and [`f64`] > >> /// are all [`Sync`], and so are simple aggregate types containing the= m, > >> /// like tuples, structs and enums. More examples of basic [`Sync`] > >> /// types include "immutable" types like `&T`, and those with simple > >> /// inherited mutability, such as [`Box`][box], [`Vec`][vec] and > >> /// most other collection types. (Generic parameters need to be [`Sync= `] > >> /// for their container to be [`Sync`].) > >> /// > >> /// A somewhat surprising consequence of the definition is that `&mut = T` > >> /// is `Sync` (if `T` is `Sync`) even though it seems like that might > >> /// provide unsynchronized mutation. The trick is that a mutable > >> /// reference behind a shared reference (that is, `& &mut T`) > >> /// becomes read-only, as if it were a `& &T`. Hence there is no risk > >> /// of a data race. > >> /// > >> /// A shorter overview of how [`Sync`] and [`Send`] relate to > >> referencing: > >> /// * `&T` is [`Send`] if and only if `T` is [`Sync`] > >> /// * `&mut T` is [`Send`] if and only if `T` is [`Send`] > >> /// * `&T` and `&mut T` are [`Sync`] if and only if `T` is [`Sync`] > >> /// > >> /// Types that are not `Sync` are those that have "interior > >> /// mutability" in a non-thread-safe form, such as [`Cell`][cell] > >> /// and [`RefCell`][refcell]. These types allow for mutation of > >> /// their contents even through an immutable, shared reference. For > >> /// example the `set` method on [`Cell`][cell] takes `&self`, so it > >> requires /// only a shared reference [`&Cell`][cell]. The method > >> performs no /// synchronization, thus [`Cell`][cell] cannot be `Sync`. > >> /// > >> /// Another example of a non-`Sync` type is the reference-counting > >> /// pointer [`Rc`][rc]. Given any reference [`&Rc`][rc], you can cl= one > >> /// a new [`Rc`][rc], modifying the reference counts in a non-atomic > >> way. /// > >> /// For cases when one does need thread-safe interior mutability, > >> /// Rust provides [atomic data types], as well as explicit locking via > >> /// [`sync::Mutex`][mutex] and [`sync::RwLock`][rwlock]. These types > >> /// ensure that any mutation cannot cause data races, hence the types > >> /// are `Sync`. Likewise, [`sync::Arc`][arc] provides a thread-safe > >> /// analogue of [`Rc`][rc]. > >> /// > >> /// Any types with interior mutability must also use the > >> /// [`cell::UnsafeCell`][unsafecell] wrapper around the value(s) which > >> /// can be mutated through a shared reference. Failing to doing this is > >> /// [undefined behavior][ub]. For example, [`transmute`][transmute]-ing > >> /// from `&T` to `&mut T` is invalid. > >> /// > >> /// See [the Nomicon][nomicon-send-and-sync] for more details about > >> `Sync`. > >> /// > >> /// [box]: ../../std/boxed/struct.Box.html > >> /// [vec]: ../../std/vec/struct.Vec.html > >> /// [cell]: crate::cell::Cell > >> /// [refcell]: crate::cell::RefCell > >> /// [rc]: ../../std/rc/struct.Rc.html > >> /// [arc]: ../../std/sync/struct.Arc.html > >> /// [atomic data types]: crate::sync::atomic > >> /// [mutex]: ../../std/sync/struct.Mutex.html > >> /// [rwlock]: ../../std/sync/struct.RwLock.html > >> /// [unsafecell]: crate::cell::UnsafeCell > >> /// [ub]: ../../reference/behavior-considered-undefined.html > >> /// [transmute]: crate::mem::transmute > >> /// [nomicon-send-and-sync]: ../../nomicon/send-and-sync.html > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> #[cfg_attr(not(test), rustc_diagnostic_item =3D "Sync")] > >> #[lang =3D "sync"] > >> #[rustc_on_unimplemented( > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::once::OnceCell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::OnceLock` instead" ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU8` > >> instead", > >> ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU16` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU32` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicU64` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicUsize` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI8` > >> instead", > >> ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI16` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI32` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicI64` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicIsize` > >> instead", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::Cell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` or `std::sync::atomic::AtomicBool` > >> instead", ), > >>=20 > >> on( > >> =20 > >> all( > >> =20 > >> _Self =3D "core::cell::Cell", > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell"), > >> not(_Self =3D "core::cell::Cell") > >> =20 > >> ), > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock`", ), > >>=20 > >> on( > >> =20 > >> _Self =3D "core::cell::RefCell", > >> note =3D "if you want to do aliasing and mutation between mul= tiple > >>=20 > >> threads, use `std::sync::RwLock` instead", ), > >>=20 > >> message =3D "`{Self}` cannot be shared between threads safely", > >> label =3D "`{Self}` cannot be shared between threads safely" > >>=20 > >> )] > >> pub unsafe auto trait Sync { > >>=20 > >> // FIXME(estebank): once support to add notes in > >>=20 > >> `rustc_on_unimplemented` // lands in beta, and it has been extended to > >> check whether a closure is // anywhere in the requirement chain, extend > >> it > >> as such (#48534): // ``` > >>=20 > >> // on( > >> // closure, > >> // note=3D"`{Self}` cannot be shared safely, consider marking= the > >>=20 > >> closure `move`" // ), > >>=20 > >> // ``` > >> =20 > >> // Empty > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl !Sync for *const T {} > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl !Sync for *mut T {} > >>=20 > >> /// Zero-sized type used to mark things that "act like" they own a `T`. > >> /// > >> /// Adding a `PhantomData` field to your type tells the compiler th= at > >> your /// type acts as though it stores a value of type `T`, even though > >> it > >> doesn't /// really. This information is used when computing certain > >> safety > >> properties. /// > >> /// For a more in-depth explanation of how to use `PhantomData`, > >> please > >> see /// [the Nomicon](../../nomicon/phantom-data.html). > >> /// > >> /// # A ghastly note =F0=9F=91=BB=F0=9F=91=BB=F0=9F=91=BB > >> /// > >> /// Though they both have scary names, `PhantomData` and 'phantom type= s' > >> are /// related, but not identical. A phantom type parameter is simply= a > >> type /// parameter which is never used. In Rust, this often causes the > >> compiler to /// complain, and the solution is to add a "dummy" use by > >> way of `PhantomData`. /// > >> /// # Examples > >> /// > >> /// ## Unused lifetime parameters > >> /// > >> /// Perhaps the most common use case for `PhantomData` is a struct that > >> has > >> an /// unused lifetime parameter, typically as part of some unsafe cod= e. > >> For /// example, here is a struct `Slice` that has two pointers of type > >> `*const T`, /// presumably pointing into an array somewhere: > >> /// > >> /// ```compile_fail,E0392 > >> /// struct Slice<'a, T> { > >> /// start: *const T, > >> /// end: *const T, > >> /// } > >> /// ``` > >> /// > >> /// The intention is that the underlying data is only valid for the > >> /// lifetime `'a`, so `Slice` should not outlive `'a`. However, this > >> /// intent is not expressed in the code, since there are no uses of > >> /// the lifetime `'a` and hence it is not clear what data it applies > >> /// to. We can correct this by telling the compiler to act *as if* the > >> /// `Slice` struct contained a reference `&'a T`: > >> /// > >> /// ``` > >> /// use std::marker::PhantomData; > >> /// > >> /// # #[allow(dead_code)] > >> /// struct Slice<'a, T> { > >> /// start: *const T, > >> /// end: *const T, > >> /// phantom: PhantomData<&'a T>, > >> /// } > >> /// ``` > >> /// > >> /// This also in turn infers the lifetime bound `T: 'a`, indicating > >> /// that any references in `T` are valid over the lifetime `'a`. > >> /// > >> /// When initializing a `Slice` you simply provide the value > >> /// `PhantomData` for the field `phantom`: > >> /// > >> /// ``` > >> /// # #![allow(dead_code)] > >> /// # use std::marker::PhantomData; > >> /// # struct Slice<'a, T> { > >> /// # start: *const T, > >> /// # end: *const T, > >> /// # phantom: PhantomData<&'a T>, > >> /// # } > >> /// fn borrow_vec(vec: &Vec) -> Slice<'_, T> { > >> /// let ptr =3D vec.as_ptr(); > >> /// Slice { > >> /// start: ptr, > >> /// end: unsafe { ptr.add(vec.len()) }, > >> /// phantom: PhantomData, > >> /// } > >> /// } > >> /// ``` > >> /// > >> /// ## Unused type parameters > >> /// > >> /// It sometimes happens that you have unused type parameters which > >> /// indicate what type of data a struct is "tied" to, even though that > >> /// data is not actually found in the struct itself. Here is an > >> /// example where this arises with [FFI]. The foreign interface uses > >> /// handles of type `*mut ()` to refer to Rust values of different > >> /// types. We track the Rust type using a phantom type parameter on > >> /// the struct `ExternalResource` which wraps a handle. > >> /// > >> /// [FFI]: > >> ../../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-ext= ern > >> al > >> -code /// > >> /// ``` > >> /// # #![allow(dead_code)] > >> /// # trait ResType { } > >> /// # struct ParamType; > >> /// # mod foreign_lib { > >> /// # pub fn new(_: usize) -> *mut () { 42 as *mut () } > >> /// # pub fn do_stuff(_: *mut (), _: usize) {} > >> /// # } > >> /// # fn convert_params(_: ParamType) -> usize { 42 } > >> /// use std::marker::PhantomData; > >> /// use std::mem; > >> /// > >> /// struct ExternalResource { > >> /// resource_handle: *mut (), > >> /// resource_type: PhantomData, > >> /// } > >> /// > >> /// impl ExternalResource { > >> /// fn new() -> Self { > >> /// let size_of_res =3D mem::size_of::(); > >> /// Self { > >> /// resource_handle: foreign_lib::new(size_of_res), > >> /// resource_type: PhantomData, > >> /// } > >> /// } > >> /// > >> /// fn do_stuff(&self, param: ParamType) { > >> /// let foreign_params =3D convert_params(param); > >> /// foreign_lib::do_stuff(self.resource_handle, foreign_params= ); > >> /// } > >> /// } > >> /// ``` > >> /// > >> /// ## Ownership and the drop check > >> /// > >> /// The exact interaction of `PhantomData` with drop check **may change > >> in > >> the future**. /// > >> /// Currently, adding a field of type `PhantomData` indicates that > >> your > >> type *owns* data of type /// `T` in very rare circumstances. This in t= urn > >> has effects on the Rust compiler's [drop check] /// analysis. For the > >> exact > >> rules, see the [drop check] documentation. /// > >> /// ## Layout > >> /// > >> /// For all `T`, the following are guaranteed: > >> /// * `size_of::>() =3D=3D 0` > >> /// * `align_of::>() =3D=3D 1` > >> /// > >> /// [drop check]: Drop#drop-check > >> #[lang =3D "phantom_data"] > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> pub struct PhantomData; > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl Hash for PhantomData { > >>=20 > >> #[inline] > >> fn hash(&self, _: &mut H) {} > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl cmp::PartialEq for PhantomData { > >>=20 > >> fn eq(&self, _other: &PhantomData) -> bool { > >> =20 > >> true > >> =20 > >> } > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl cmp::Eq for PhantomData {} > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl cmp::PartialOrd for PhantomData { > >>=20 > >> fn partial_cmp(&self, _other: &PhantomData) -> > >> Option > >>=20 > >> { Option::Some(cmp::Ordering::Equal) > >>=20 > >> } > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl cmp::Ord for PhantomData { > >>=20 > >> fn cmp(&self, _other: &PhantomData) -> cmp::Ordering { > >> =20 > >> cmp::Ordering::Equal > >> =20 > >> } > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl Copy for PhantomData {} > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl Clone for PhantomData { > >>=20 > >> fn clone(&self) -> Self { > >> =20 > >> Self > >> =20 > >> } > >>=20 > >> } > >>=20 > >> #[stable(feature =3D "rust1", since =3D "1.0.0")] > >> impl Default for PhantomData { > >>=20 > >> fn default() -> Self { > >> =20 > >> Self > >> =20 > >> } > >>=20 > >> } > >>=20 > >> #[unstable(feature =3D "structural_match", issue =3D "31434")] > >> impl StructuralPartialEq for PhantomData {} > >>=20 > >> /// Compiler-internal trait used to indicate the type of enum > >> discriminants. /// > >> /// This trait is automatically implemented for every type and does not > >> add > >> any /// guarantees to [`mem::Discriminant`]. It is **undefined behavio= r** > >> to transmute /// between `DiscriminantKind::Discriminant` and > >> `mem::Discriminant`. /// > >> /// [`mem::Discriminant`]: crate::mem::Discriminant > >> #[unstable( > >>=20 > >> feature =3D "discriminant_kind", > >> issue =3D "none", > >> reason =3D "this trait is unlikely to ever be stabilized, use > >>=20 > >> `mem::discriminant` instead" )] > >> #[lang =3D "discriminant_kind"] > >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> pub trait DiscriminantKind { > >>=20 > >> /// The type of the discriminant, which must satisfy the trait > >> /// bounds required by `mem::Discriminant`. > >> #[lang =3D "discriminant_type"] > >> type Discriminant: Clone + Copy + Debug + Eq + PartialEq + Hash + > >> Send + > >>=20 > >> Sync + Unpin; } > >>=20 > >> /// Used to determine whether a type contains > >> /// any `UnsafeCell` internally, but not through an indirection. > >> /// This affects, for example, whether a `static` of that type is > >> /// placed in read-only static memory or writable static memory. > >> /// This can be used to declare that a constant with a generic type > >> /// will not contain interior mutability, and subsequently allow > >> /// placing the constant behind references. > >> /// > >> /// # Safety > >> /// > >> /// This trait is a core part of the language, it is just expressed as= a > >> trait in libcore for /// convenience. Do *not* implement it for other > >> types. > >> // FIXME: Eventually this trait should become > >> `#[rustc_deny_explicit_impl]`. // That requires porting the impls below > >> to native internal impls. #[lang =3D "freeze"] > >> #[unstable(feature =3D "freeze", issue =3D "121675")] > >> pub unsafe auto trait Freeze {} > >>=20 > >> #[unstable(feature =3D "freeze", issue =3D "121675")] > >> impl !Freeze for UnsafeCell {} > >> marker_impls! { > >>=20 > >> #[unstable(feature =3D "freeze", issue =3D "121675")] > >> unsafe Freeze for > >> =20 > >> {T: ?Sized} PhantomData, > >> {T: ?Sized} *const T, > >> {T: ?Sized} *mut T, > >> {T: ?Sized} &T, > >> {T: ?Sized} &mut T, > >>=20 > >> } > >>=20 > >> /// Types that do not require any pinning guarantees. > >> /// > >> /// For information on what "pinning" is, see the [`pin` module] > >> documentation. /// > >> /// Implementing the `Unpin` trait for `T` expresses the fact that `T`= is > >> pinning-agnostic: /// it shall not expose nor rely on any pinning > >> guarantees. This, in turn, means that a /// `Pin`-wrapped pointer to s= uch > >> a > >> type can feature a *fully unrestricted* API. /// In other words, if `T: > >> Unpin`, a value of type `T` will *not* be bound by the invariants /// > >> which > >> pinning otherwise offers, even when "pinned" by a [`Pin`] pointing > >> at > >> it. /// When a value of type `T` is pointed at by a [`Pin`], [`Pi= n`] > >> will not restrict access /// to the pointee value like it normally wou= ld, > >> thus allowing the user to do anything that they /// normally could wit= h a > >> non-[`Pin`]-wrapped `Ptr` to that value. /// > >> /// The idea of this trait is to alleviate the reduced ergonomics of A= PIs > >> that require the use /// of [`Pin`] for soundness for some types, but > >> which > >> also want to be used by other types that /// don't care about pinning. > >> The > >> prime example of such an API is [`Future::poll`]. There are many /// > >> [`Future`] types that don't care about pinning. These futures can > >> implement > >> `Unpin` and /// therefore get around the pinning related restrictions = in > >> the API, while still allowing the /// subset of [`Future`]s which *do* > >> require pinning to be implemented soundly. /// > >> /// For more discussion on the consequences of [`Unpin`] within the wi= der > >> scope of the pinning /// system, see the [section about `Unpin`] in the > >> [`pin` module]. /// > >> /// `Unpin` has no consequence at all for non-pinned data. In particul= ar, > >> [`mem::replace`] happily /// moves `!Unpin` data, which would be > >> immovable > >> when pinned ([`mem::replace`] works for any /// `&mut T`, not just when > >> `T: > >> Unpin`). > >> /// > >> /// *However*, you cannot use [`mem::replace`] on `!Unpin` data which = is > >> *pinned* by being wrapped /// inside a [`Pin`] pointing at it. Th= is > >> is > >> because you cannot (safely) use a /// [`Pin`] to get a `&mut T` to > >> its > >> pointee value, which you would need to call /// [`mem::replace`], and > >> *that* is what makes this system work. > >> /// > >> /// So this, for example, can only be done on types implementing `Unpi= n`: > >> /// > >> /// ```rust > >> /// # #![allow(unused_must_use)] > >> /// use std::mem; > >> /// use std::pin::Pin; > >> /// > >> /// let mut string =3D "this".to_string(); > >> /// let mut pinned_string =3D Pin::new(&mut string); > >> /// > >> /// // We need a mutable reference to call `mem::replace`. > >> /// // We can obtain such a reference by (implicitly) invoking > >> `Pin::deref_mut`, /// // but that is only possible because `String` > >> implements `Unpin`. /// mem::replace(&mut *pinned_string, > >> "other".to_string()); > >> /// ``` > >> /// > >> /// This trait is automatically implemented for almost every type. The > >> compiler is free /// to take the conservative stance of marking types = as > >> [`Unpin`] so long as all of the types that /// compose its fields are > >> also > >> [`Unpin`]. This is because if a type implements [`Unpin`], then it ///= is > >> unsound for that type's implementation to rely on pinning-related > >> guarantees for soundness, /// *even* when viewed through a "pinning" > >> pointer! It is the responsibility of the implementor of /// a type that > >> relies upon pinning for soundness to ensure that type is *not* marked = as > >> [`Unpin`] /// by adding [`PhantomPinned`] field. For more details, see > >> the > >> [`pin` module] docs. /// > >> /// [`mem::replace`]: crate::mem::replace "mem replace" > >> /// [`Future`]: crate::future::Future "Future" > >> /// [`Future::poll`]: crate::future::Future::poll "Future poll" > >> /// [`Pin`]: crate::pin::Pin "Pin" > >> /// [`Pin`]: crate::pin::Pin "Pin" > >> /// [`pin` module]: crate::pin "pin module" > >> /// [section about `Unpin`]: crate::pin#unpin "pin module docs about > >> unpin" > >> /// [`unsafe`]: ../../std/keyword.unsafe.html "keyword unsafe" > >> #[stable(feature =3D "pin", since =3D "1.33.0")] > >> #[diagnostic::on_unimplemented( > >>=20 > >> note =3D "consider using the `pin!` macro\nconsider using `Box::p= in` > >> if > >>=20 > >> you need to access the pinned value outside of the current scope", > >> message > >> =3D "`{Self}` cannot be unpinned" > >> )] > >> #[lang =3D "unpin"] > >> pub auto trait Unpin {} > >>=20 > >> /// A marker type which does not implement `Unpin`. > >> /// > >> /// If a type contains a `PhantomPinned`, it will not implement `Unpin` > >> by > >> default. #[stable(feature =3D "pin", since =3D "1.33.0")] > >> #[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, > >> Hash)] pub struct PhantomPinned; > >>=20 > >> #[stable(feature =3D "pin", since =3D "1.33.0")] > >> impl !Unpin for PhantomPinned {} > >>=20 > >> marker_impls! { > >>=20 > >> #[stable(feature =3D "pin", since =3D "1.33.0")] > >> Unpin for > >> =20 > >> {T: ?Sized} &T, > >> {T: ?Sized} &mut T, > >>=20 > >> } > >>=20 > >> marker_impls! { > >>=20 > >> #[stable(feature =3D "pin_raw", since =3D "1.38.0")] > >> Unpin for > >> =20 > >> {T: ?Sized} *const T, > >> {T: ?Sized} *mut T, > >>=20 > >> } > >>=20 > >> /// A marker for types that can be dropped. > >> /// > >> /// This should be used for `~const` bounds, > >> /// as non-const bounds will always hold for every type. > >> #[unstable(feature =3D "const_destruct", issue =3D "133214")] > >> #[lang =3D "destruct"] > >> #[rustc_on_unimplemented(message =3D "can't drop `{Self}`", > >> append_const_msg)] #[cfg_attr(bootstrap, > >> rustc_deny_explicit_impl(implement_via_object =3D false))] > >> #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> #[cfg_attr(not(bootstrap), const_trait)] > >> pub trait Destruct {} > >>=20 > >> /// A marker for tuple types. > >> /// > >> /// The implementation of this trait is built-in and cannot be > >> implemented > >> /// for any user type. > >> #[unstable(feature =3D "tuple_trait", issue =3D "none")] > >> #[lang =3D "tuple_trait"] > >> #[diagnostic::on_unimplemented(message =3D "`{Self}` is not a tuple")] > >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> pub trait Tuple {} > >>=20 > >> /// A marker for pointer-like types. > >> /// > >> /// This trait can only be implemented for types that are certain to h= ave > >> /// the same size and alignment as a [`usize`] or [`*const ()`](pointe= r). > >> /// To ensure this, there are special requirements on implementations > >> /// of `PointerLike` (other than the already-provided implementations > >> /// for built-in types): > >> /// > >> /// * The type must have `#[repr(transparent)]`. > >> /// * The type=E2=80=99s sole non-zero-sized field must itself impleme= nt > >> `PointerLike`. #[unstable(feature =3D "pointer_like_trait", issue =3D > >> "none")] > >> #[lang =3D "pointer_like"] > >> #[diagnostic::on_unimplemented( > >>=20 > >> message =3D "`{Self}` needs to have the same ABI as a pointer", > >> label =3D "`{Self}` needs to be a pointer-like type" > >>=20 > >> )] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> pub trait PointerLike {} > >>=20 > >> #[cfg(not(bootstrap))] > >> marker_impls! { > >>=20 > >> #[unstable(feature =3D "pointer_like_trait", issue =3D "none")] > >> PointerLike for > >> =20 > >> isize, > >> usize, > >> {T} &T, > >> {T} &mut T, > >> {T} *const T, > >> {T} *mut T, > >> {T: PointerLike} crate::pin::Pin, > >>=20 > >> } > >>=20 > >> /// A marker for types which can be used as types of `const` generic > >> parameters. /// > >> /// These types must have a proper equivalence relation (`Eq`) and it > >> must > >> be automatically /// derived (`StructuralPartialEq`). There's a > >> hard-coded > >> check in the compiler ensuring /// that all fields are also > >> `ConstParamTy`, > >> which implies that recursively, all fields /// are `StructuralPartialE= q`. > >> #[lang =3D "const_param_ty"] > >> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > >> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a > >> const > >> parameter type")] #[allow(multiple_supertrait_upcastable)] > >> // We name this differently than the derive macro so that the > >> `adt_const_params` can // be used independently of `unsized_const_para= ms` > >> without requiring a full path // to the derive macro every time it is > >> used. > >> This should be renamed on stabilization. pub trait ConstParamTy_: > >> UnsizedConstParamTy + StructuralPartialEq + Eq {} > >>=20 > >> /// Derive macro generating an impl of the trait `ConstParamTy`. > >> #[rustc_builtin_macro] > >> #[allow_internal_unstable(unsized_const_params)] > >> #[unstable(feature =3D "adt_const_params", issue =3D "95174")] > >> pub macro ConstParamTy($item:item) { > >>=20 > >> /* compiler built-in */ > >>=20 > >> } > >>=20 > >> #[lang =3D "unsized_const_param_ty"] > >> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > >> #[diagnostic::on_unimplemented(message =3D "`{Self}` can't be used as a > >> const > >> parameter type")] /// A marker for types which can be used as types of > >> `const` generic parameters. /// > >> /// Equivalent to [`ConstParamTy_`] except that this is used by > >> /// the `unsized_const_params` to allow for fake unstable impls. > >> pub trait UnsizedConstParamTy: StructuralPartialEq + Eq {} > >>=20 > >> /// Derive macro generating an impl of the trait `ConstParamTy`. > >> #[rustc_builtin_macro] > >> #[allow_internal_unstable(unsized_const_params)] > >> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > >> pub macro UnsizedConstParamTy($item:item) { > >>=20 > >> /* compiler built-in */ > >>=20 > >> } > >>=20 > >> // FIXME(adt_const_params): handle `ty::FnDef`/`ty::Closure` > >> marker_impls! { > >>=20 > >> #[unstable(feature =3D "adt_const_params", issue =3D "95174")] > >> ConstParamTy_ for > >> =20 > >> usize, u8, u16, u32, u64, u128, > >> isize, i8, i16, i32, i64, i128, > >> bool, > >> char, > >> (), > >> {T: ConstParamTy_, const N: usize} [T; N], > >>=20 > >> } > >>=20 > >> marker_impls! { > >>=20 > >> #[unstable(feature =3D "unsized_const_params", issue =3D "95174")] > >> UnsizedConstParamTy for > >> =20 > >> usize, u8, u16, u32, u64, u128, > >> isize, i8, i16, i32, i64, i128, > >> bool, > >> char, > >> (), > >> {T: UnsizedConstParamTy, const N: usize} [T; N], > >> =20 > >> str, > >> {T: UnsizedConstParamTy} [T], > >> {T: UnsizedConstParamTy + ?Sized} &T, > >>=20 > >> } > >>=20 > >> /// A common trait implemented by all function pointers. > >> #[unstable( > >>=20 > >> feature =3D "fn_ptr_trait", > >> issue =3D "none", > >> reason =3D "internal trait for implementing various traits for all > >>=20 > >> function pointers" )] > >> #[lang =3D "fn_ptr_trait"] > >> #[cfg_attr(bootstrap, rustc_deny_explicit_impl(implement_via_object =3D > >> false))] #[cfg_attr(not(bootstrap), rustc_deny_explicit_impl)] > >> #[cfg_attr(not(bootstrap), rustc_do_not_implement_via_object)] > >> pub trait FnPtr: Copy + Clone { > >>=20 > >> /// Returns the address of the function pointer. > >> #[lang =3D "fn_ptr_addr"] > >> fn addr(self) -> *const (); > >>=20 > >> } > >>=20 > >> /// Derive macro generating impls of traits related to smart pointers. > >> #[rustc_builtin_macro(CoercePointee, attributes(pointee))] > >> #[allow_internal_unstable(dispatch_from_dyn, coerce_unsized, unsize)] > >> #[unstable(feature =3D "derive_coerce_pointee", issue =3D "123430")] > >> #[cfg(not(bootstrap))] > >> pub macro CoercePointee($item:item) { > >>=20 > >> /* compiler built-in */ > >>=20 > >> } > >>=20 > >>=20 > >> ``` > >>=20 > >>=20 > >> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version > >>=20 > >> 3.24.43, cairo version 1.18.2) of 2025-04-17 built on Mufasa > >>=20 > >> Repository revision: 7b35a5062231ec5a11c7a87d4797cfb5dba25121 > >> Repository branch: feature/igc > >> System Description: NixOS 24.11 (Vicuna) > >>=20 > >> Configured using: > >> 'configure 'CFLAGS=3D-O3 -march=3Dnative' > >> --prefix=3D/home/exec/Projects/git.savannah.gnu.org/git/emacs-build/= featu > >> re_i > >>=20 > >> gc-7b35a5062231ec5a11c7a87d4797cfb5dba25121-O3 --with-mps=3Dyes > >> --with-imagemagick --with-modules --with-pgtk > >>=20 > >> --with-cairo --with-cairo-xcb --without-compress-install > >> --with-mailutils --with-tree-sitter --with-xinput2 > >> --enable-link-time-optimization --with-file-notification=3Dinotify' > >>=20 > >> Configured features: > >> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ > >> IMAGEMAGICK JPEG LCMS2 LIBOTF LIBXML2 MODULES MPS NATIVE_COMP NOTIFY > >> INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF > >> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB > >>=20 > >> Important settings: > >> value of $LC_COLLATE: C > >> value of $LC_MONETARY: en_US.UTF-8 > >> value of $LC_NUMERIC: en_US.UTF-8 > >> value of $LC_TIME: C > >> value of $LANG: en_US.UTF-8 > >> value of $XMODIFIERS: @im=3Dfcitx > >> locale-coding-system: utf-8-unix > >>=20 > >> Major mode: Elisp/l > >>=20 > >> Minor modes in effect: > >> restore-point-mode: t > >> global-atomic-chrome-edit-mode: t > >> global-git-gutter-mode: t > >> git-gutter-mode: t > >> marginalia-mode: t > >> elisp-def-mode: t > >> flycheck-posframe-mode: t > >> hungry-delete-mode: t > >> symbol-overlay-mode: t > >> keycast-tab-bar-mode: t > >> vertico-truncate-mode: t > >> vertico-multiform-mode: t > >> vertico-mode: t > >> telega-root-auto-fill-mode: t > >> telega-contact-birthdays-mode: t > >> telega-active-video-chats-mode: t > >> telega-active-locations-mode: t > >> telega-patrons-mode: t > >> telega-active-stories-mode: t > >> tab-line-nerd-icons-global-mode: t > >> global-tab-line-mode: t > >> tab-line-mode: t > >> ultra-scroll-mode: t > >> pixel-scroll-precision-mode: t > >> org-roam-db-autosync-mode: t > >> global-org-modern-mode: t > >> mu4e-modeline-mode: t > >> global-kkp-mode: t > >> global-git-commit-mode: t > >> flycheck-mode: t > >> engine-mode: t > >> symex-mode: t > >> global-evil-surround-mode: t > >> evil-surround-mode: t > >> yas-global-mode: t > >> yas-minor-mode: t > >> corfu-terminal-mode: t > >> corfu-history-mode: t > >> global-corfu-mode: t > >> corfu-mode: t > >> rainbow-mode: t > >> elisp-autofmt-mode: t > >> highlight-defined-mode: t > >> highlight-numbers-mode: t > >> hes-mode: t > >> rainbow-delimiters-mode: t > >> burly-tabs-mode: t > >> global-form-feed-st-mode: t > >> form-feed-st-mode: t > >> eat-eshell-mode: t > >> sly-symbol-completion-mode: t > >> super-save-mode: t > >> savehist-mode: t > >> which-key-mode: t > >> super-hint-xref-mode: t > >> super-hint-rg-mode: t > >> windmove-mode: t > >> server-mode: t > >> save-place-mode: t > >> recentf-mode: t > >> winner-mode: t > >> persistent-scratch-autosave-mode: t > >> global-dash-fontify-mode: t > >> dash-fontify-mode: t > >> nerd-icons-completion-mode: t > >> sudo-edit-indicator-mode: t > >> global-evil-visualstar-mode: t > >> evil-visualstar-mode: t > >> evil-commentary-mode: t > >> global-evil-mc-mode: t > >> evil-mc-mode: t > >> evil-lion-mode: t > >> global-evil-collection-unimpaired-mode: t > >> evil-collection-unimpaired-mode: t > >> buffer-face-mode: t > >> TeX-PDF-mode: t > >> display-line-numbers-mode: t > >> electric-pair-mode: t > >> global-auto-revert-mode: t > >> evil-mode: t > >> evil-local-mode: t > >> general-override-mode: t > >> minions-mode: t > >> el-patch-use-package-mode: t > >> elpaca-use-package-mode: t > >> override-global-mode: t > >> tooltip-mode: t > >> global-eldoc-mode: t > >> eldoc-mode: t > >> show-paren-mode: t > >> electric-indent-mode: t > >> mouse-wheel-mode: t > >> tab-bar-mode: t > >> file-name-shadow-mode: t > >> context-menu-mode: t > >> global-font-lock-mode: t > >> font-lock-mode: t > >> minibuffer-regexp-mode: t > >> column-number-mode: -1 > >> line-number-mode: -1 > >> transient-mark-mode: t > >> auto-composition-mode: t > >> auto-encryption-mode: t > >> auto-compression-mode: t > >>=20 > >> Load-path shadows: > >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > >> /home/exec/.emacs.d/elpaca/builds/standard-themes/theme-loaddefs > >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > >> /home/exec/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs > >> /home/exec/.emacs.d/elpaca/builds/modus-themes/theme-loaddefs hides > >> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7= b35 > >> a5 > >> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/theme-l= oad > >> def s /home/exec/.emacs.d/elpaca/builds/transient/transient hides > >> /home/exec/Projects/git.savannah.gnu.org/git/emacs-build/feature_igc-7= b35 > >> a5 > >> 062231ec5a11c7a87d4797cfb5dba25121-O3/share/emacs/31.0.50/lisp/transie= nt > >>=20 > >> Features: > >> (shadow sort mail-extr expand-region yaml-mode-expansions > >> subword-mode-expansions text-mode-expansions cc-mode-expansions > >> the-org-mode-expansions python-el-fgallina-expansions > >> latex-mode-expansions js2-mode-expansions js-mode-expansions > >> web-mode-expansions html-mode-expansions clojure-mode-expansions > >> er-basic-expansions expand-region-core expand-region-custom > >> evil-collection-embark embark-org embark-consult embark gptel-curl > >> nerd-icons-dired diredfl info-colors vertico-sort cus-start descr-text > >> dabbrev cape lsp-diagnostics lsp-modeline lsp-icons lsp-zig lsp-yang > >> lsp-yaml lsp-xml lsp-wgsl lsp-volar lsp-vimscript lsp-vhdl lsp-vetur > >> lsp-html lsp-verilog lsp-vala lsp-v lsp-typespec lsp-typeprof lsp-ttcn3 > >> lsp-ts-query lsp-trunk lsp-toml lsp-tilt lsp-tex lsp-terraform > >> lsp-svelte lsp-steep lsp-sqls lsp-sql lsp-sorbet lsp-solidity > >> lsp-solargraph lsp-semgrep lsp-ruff lsp-ruby-syntax-tree lsp-ruby-lsp > >> lsp-rubocop lsp-roslyn lsp-roc lsp-rf lsp-remark lsp-racket lsp-r > >> lsp-qml lsp-pyright lsp-pylsp lsp-pyls lsp-pwsh lsp-purescript lsp-pls > >> lsp-php lsp-perlnavigator lsp-perl lsp-openscad lsp-ocaml lsp-nushell > >> lsp-nix lsp-nim lsp-nginx lsp-nextflow lsp-move lsp-mojo lsp-mint > >> lsp-meson lsp-mdx lsp-matlab lsp-marksman lsp-markdown lsp-magik > >> lsp-fennel lsp-lua lsp-lisp lsp-kubernetes-helm lsp-kotlin lsp-json > >> lsp-jq lsp-javascript lsp-idris lsp-haxe lsp-hack lsp-groovy lsp-graph= ql > >> lsp-golangci-lint lsp-glsl lsp-gleam lsp-gdscript lsp-fsharp lsp-futha= rk > >> lsp-fortran lsp-eslint lsp-erlang lsp-emmet lsp-elm lsp-elixir > >> lsp-earthly lsp-dockerfile lsp-dhall lsp-d lsp-cypher lsp-cucumber > >> lsp-copilot lsp-css lsp-c3 lsp-csharp lsp-crystal lsp-credo lsp-cobol > >> lsp-cmake lsp-clojure lsp-clangd lsp-bufls lsp-go lsp-completion > >> lsp-beancount lsp-bash lsp-awk lsp-autotools lsp-astro lsp-asm > >> lsp-ansible lsp-angular lsp-ada lsp-actionscript copilot > >> copilot-balancer editorconfig editorconfig-core editorconfig-core-hand= le > >> editorconfig-fnmatch jsonrpc gptel-openai-extras gptel-anthropic > >> gptel-gemini gptel-ollama org-indent gptel-openai consult-dir-autoloads > >> consult-ag-autoloads restore-point evil-collection-atomic-chrome > >> atomic-chrome git-gutter marginalia elisp-def evil-collection-ert ert > >> flycheck-posframe evil-collection-hungry-delete hungry-delete > >> symbol-overlay keycast zig-mode reformatter empv vertico-truncate > >> vertico-posframe vertico-multiform evil-collection-vertico vertico > >> lsp-uniteai nix-ts-mode go-translate gt-text-utility gt-engine-echo > >> gt-engine-libre gt-engine-chatgpt gt-engine-youdao gt-engine-osxdict > >> gt-engine-stardict gt-engine-deepl gt-engine-google-rpc gt-engine-goog= le > >> gt-engine-bing gt-extension gt-faces gt-core gt-httpx sdcv cap-words > >> superword subword evil-collection-telega telega-obsolete telega > >> telega-tdlib-events telega-match telega-root telega-info telega-chat > >> telega-modes telega-company telega-emoji telega-user > >> telega-notifications telega-voip telega-msg telega-story telega-webpage > >> telega-tme telega-sticker telega-vvnote telega-ffplay telega-i18n > >> telega-sort telega-filter telega-ins telega-inline telega-util > >> telega-folders telega-topic telega-media telega-tdlib telega-server > >> telega-core telega-customize emacsbug tab-line-nerd-icons > >> evil-collection-imenu-list imenu-list tab-line rust-utils > >> rust-mode-treesitter rust-ts-mode rust-mode rust-playpen rust-cargo > >> rust-common rust-rustfmt rust-compile cargo cargo-process rg-info-hack > >> rg-menu rg-ibuffer ibuf-macs rg-result wgrep-rg rg-history ibuf-ext > >> evil-collection-ibuffer ibuffer ibuffer-loaddefs rg-header > >> evil-collection-ultra-scroll ultra-scroll pixel-scroll cua-base > >> org-sliced-images emacsql-sqlite-builtin evil-collection-org-roam > >> org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-= id > >> org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam > >> org-capture emacsql-sqlite emacsql emacsql-compiler org-journal > >> org-crypt cal-iso org-modern orderless evil-collection-mu4e mu4e > >> mu4e-org mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts > >> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg > >> gnus-art mm-uu mml2015 mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark > >> mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders > >> mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars > >> mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cyphejor qml-mo= de > >> kkp rfc-mode string-inflection wakatime-mode systemd minuet pr-review > >> pr-review-render pr-review-action magit-diff git-commit > >> evil-collection-log-edit log-edit pcvs-util add-log magit-core > >> magit-autorevert magit-margin magit-transient magit-process > >> evil-collection-with-editor with-editor magit-mode magit-git magit-base > >> pr-review-input pr-review-api ghub-graphql treepy gsexp ghub > >> pr-review-common consult-lsp lsp-ui lsp-ui-flycheck lsp-ui-doc > >> evil-collection-lsp-ui-imenu lsp-ui-imenu lsp-ui-peek lsp-ui-sideline > >> lsp-rust lsp-semantic-tokens lsp-mode network-stream > >> evil-collection-markdown-mode markdown-mode lsp-ui-util lsp-protocol > >> llm-prompt groovy-mode iedit help-macro iedit-lib hide-comnt > >> minibuffer-header gptel-quick gotest fzf flycheck-clj-kondo jka-compr > >> pos-tip consult-flycheck flycheck-rust engine-mode evil-collection-eme= nt > >> ement-room-list taxy-magit-section taxy ement ement-notifications > >> ement-notify ement-room ewoc ement-lib ement-api ement-structs > >> ement-macros dns llm-ollama llm-provider-utils llm-models > >> llm-request-plz plz-event-source plz-media-type plz llm symex symex-ev= il > >> symex-evil-support symex-hydra symex-transformations > >> symex-transformations-lisp symex-utils evil-cleverparens > >> evil-cleverparens-text-objects evil-cleverparens-util smartparens > >> evil-surround symex-misc symex-interface-builtins symex-interface-fenn= el > >> symex-interface-arc symex-interface-common-lisp symex-interface-clojure > >> symex-interface-scheme symex-interface-racket symex-interface-elisp > >> symex-interop symex-interface symex-traversals symex-dsl symex-evaluat= or > >> symex-computations symex-primitives symex-ts symex-utils-ts > >> symex-transformations-ts symex-primitives-lisp symex-data symex-ui > >> symex-custom evil-collection-lispy lispy le-clojure delsel lispy-inline > >> avy lispy-tags zoutline combobulate evil-collection-elfeed elfeed-show > >> elfeed-search elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db > >> elfeed-lib xml-query dired-git-info dired-hacks dired-preview > >> evil-collection-cmake-mode cmake-mode consult-yasnippet yasnippet-capf > >> yasnippet-snippets yasnippet kind-icon svg-lib corfu-terminal popon > >> corfu-popupinfo corfu-indexed corfu-history evil-collection-corfu corfu > >> consult-ls-git paredit clojure-ts-mode evil-collection-cider cider > >> tramp-sh cider-debug cider-browse-ns cider-mode cider-xref-backend > >> cider-find cider-inspector cider-completion cider-profile cider-eval > >> cider-jar cider-repl-history cider-repl cider-resolve cider-test > >> cider-overlays cider-stacktrace cider-doc cider-browse-spec > >> cider-clojuredocs cider-eldoc cider-docstring cider-client cider-common > >> cider-completion-context cider-connection cider-popup sesman-browser > >> nrepl-client cider-util sesman queue nrepl-dict spinner clojure-mode > >> rainbow-mode elisp-autofmt loadhist highlight-defined highlight-numbers > >> parent-mode highlight-escape-sequences rainbow-delimiters chatgpt-shell > >> chatgpt-shell-prompt-compose chatgpt-shell-perplexity > >> chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama > >> chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek > >> chatgpt-shell-anthropic evil-collection-smerge-mode smerge-mode diff > >> shell-maker ielm evil-collection-eshell eshell em-prompt esh-mode > >> esh-var esh-cmd esh-ext esh-proc esh-opt esh-io esh-arg esh-module > >> esh-module-loaddefs esh-util cargo-jump-xref toml breadcrumb pulse > >> bookmark-in-project bookmark+ bookmark+-key bookmark+-1 gnus-sum > >> gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail > >> mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win > >> bookmark+-bmu bookmark+-lit bookmark+-mac babashka parseedn > >> parseclj-parser parseclj-lex parseclj-alist cnfonts burly-tabs burly > >> compile-multi form-feed-st google-this echo-bar fcitx > >> evil-collection-eat eat term/xterm xterm evil-collection-term term ehe= lp > >> ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util > >> rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex > >> ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach > >> org-element org-persist org-id org-refile org-element-ast inline > >> avl-tree htmlize evil-collection-explain-pause-mode explain-pause-mode > >> explain-pause-top explain-pause-log-to-socket evil-collection-profiler > >> profiler weather-metno solar cal-dst url-cache display-wttr kdeconnect > >> crux pest-mode popwin modus-themes blackboard-theme standard-themes > >> nimbus-theme tok-theme danneskjold-theme srcery-theme subatomic256-the= me > >> iscroll xml+ evil-textobj-tree-sitter > >> evil-textobj-tree-sitter-thing-at-point evil-textobj-tree-sitter-core > >> tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get > >> dired-aux tsc-obsolete ctable evil-collection-color-rg color-rg > >> line-reminder ov ht fringe-helper solarized-theme solarized > >> solarized-faces sqlup-mode evil-collection-bm bm zen-mode > >> evil-collection-sly sly gud sly-completion sly-buttons sly-messages > >> sly-common evil-collection-apropos apropos evil-collection-arc-mode > >> arc-mode archive-mode hyperspec sicp base16-theme idea-darkula-theme > >> hybrid-reverse-theme material-theme doom-themes doom-themes-base > >> nyan-mode organic-green-theme inkpot-theme github-dark-vscode-theme > >> almost-mono-themes cyberpunk-theme soothe-theme soothe-tva zenburn-the= me > >> mindre-theme kaolin-themes kaolin-themes-lib tron-legacy-theme > >> wildcharm-theme atom-one-dark-theme parchment-theme autothemer > >> visual-fill-column transpose-frame gameoflife evil-collection-docker > >> docker docker-context docker-volume docker-network docker-image > >> docker-container docker-faces docker-core docker-compose docker-process > >> docker-utils docker-group aio dockerfile-mode emacs-everywhere cus-dir > >> dumb-jump evil-collection-popup popup websocket bindat bing-dict cl > >> bing-dict-cache hl-todo atom-dark-theme ef-themes uwu-theme vagrant > >> evil-collection-ag ag vc-svn find-dired alarm-clock alert log4e > >> notifications gntp pinentry evil-collection-hackernews hackernews > >> evil-collection-notmuch notmuch notmuch-tree notmuch-jump notmuch-hello > >> notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-message > >> notmuch-draft notmuch-maildir-fcc notmuch-address notmuch-company > >> notmuch-parser notmuch-wash coolj goto-addr icalendar diary-lib > >> diary-loaddefs notmuch-tag notmuch-lib notmuch-compat message sendmail > >> yank-media rfc822 mml mailabbrev gmm-utils mm-view mml-smime mml-sec > >> smime gnutls dig mm-decode mm-bodies mm-encode fussy flx affe > >> evil-collection-consult consult clang-format apheleia apheleia-rcs > >> apheleia-dp apheleia-formatters apheleia-utils apheleia-log > >> apheleia-formatter-context vimrc-mode gnuplot olivetti super-save > >> evil-collection-helpful helpful cc-langs trace cl-print > >> evil-collection-edebug edebug evil-collection-debug debug backtrace > >> info-look evil-collection-info info help-fns radix-tree > >> evil-collection-elisp-refs elisp-refs solidity-mode solidity-common > >> evil-collection-git-timemachine git-timemachine web-mode disp-table > >> evil-collection-go-mode go-mode find-file evil-collection-js2-mode > >> js2-mode etags fileloop zig-mode-autoloads reformatter-autoloads > >> empv-autoloads yasnippet-snippets-autoloads marginalia-autoloads > >> vertico-truncate-autoloads vertico-posframe-autoloads vertico-autoloads > >> lsp-uniteai-autoloads nix-ts-mode-autoloads go-translate-autoloads > >> alert-autoloads gntp-autoloads log4e-autoloads sdcv-autoloads > >> telega-autoloads tab-line-nerd-icons-autoloads keycast-autoloads > >> rust-mode-autoloads cargo-autoloads toml-autoloads rg-autoloads > >> writeroom-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads > >> makefile-executor-autoloads ultra-scroll-autoloads pdf-tools-autoloads > >> org-sliced-images-autoloads consult-org-roam-autoloads > >> org-roam-autoloads org-journal-autoloads org-download-autoloads > >> org-modern-autoloads orderless-autoloads mu4e-autoloads > >> cyphejor-autoloads symbol-overlay-autoloads qml-mode-autoloads > >> kkp-autoloads rfc-mode-autoloads string-inflection-autoloads > >> wakatime-mode-autoloads webpaste-autoloads systemd-autoloads > >> minuet-autoloads pr-review-autoloads forge-autoloads closql-autoloads > >> emacsql-autoloads ghub-autoloads treepy-autoloads yaml-autoloads > >> lsp-pyright-autoloads consult-lsp-autoloads lsp-ui-autoloads > >> lsp-mode-autoloads groovy-mode-autoloads imenu-list-autoloads > >> hungry-delete-autoloads hide-comnt-autoloads minibuffer-header-autoloa= ds > >> gptel-quick-autoloads gptel-autoloads gotest-autoloads fzf-autoloads > >> flycheck-golangci-lint-autoloads flycheck-clj-kondo-autoloads > >> pos-tip-autoloads consult-flycheck-autoloads flycheck-rust-autoloads > >> flycheck-posframe-autoloads flycheck-autoloads engine-mode-autoloads > >> ement-autoloads taxy-magit-section-autoloads taxy-autoloads > >> embark-consult-autoloads embark-autoloads ellama-autoloads llm-autoloa= ds > >> plz-event-source-autoloads plz-media-type-autoloads plz-autoloads > >> symex-autoloads tree-sitter-autoloads tsc-autoloads lispy-autoloads > >> iedit-autoloads swiper-autoloads ivy-autoloads zoutline-autoloads > >> evil-cleverparens-autoloads smartparens-autoloads combobulate-autoloads > >> combobulate-go combobulate-json combobulate-yaml combobulate-css > >> combobulate-js-ts combobulate-python combobulate-html combobulate-toml > >> combobulate-cursor multiple-cursors mc-separate-operations > >> rectangular-region-mode mc-mark-pop mc-edit-lines > >> mc-hide-unmatched-lines-mode mc-mark-more sgml-mode mc-cycle-cursors > >> multiple-cursors-core combobulate-query savehist evil-collection-scheme > >> scheme combobulate-ui combobulate-display let-alist combobulate-ztree > >> combobulate-envelope combobulate-manipulation evil-collection-python > >> python combobulate-procedure combobulate-navigation combobulate-misc > >> combobulate-setup tempo combobulate-interface combobulate-settings > >> combobulate-rules elisp-def-autoloads elfeed-tube-mpv-autoloads > >> elfeed-tube-autoloads elfeed-autoloads eee-autoloads eee > >> dired-git-info-autoloads dired-hacks-autoloads dired-preview-autoloads > >> diredfl-autoloads git-gutter-autoloads cmake-mode-autoloads > >> consult-yasnippet-autoloads yasnippet-capf-autoloads yasnippet-autoloa= ds > >> cape-autoloads kind-icon-autoloads svg-lib-autoloads > >> corfu-terminal-autoloads popon-autoloads corfu-autoloads > >> copilot-autoloads copilot-chat-autoloads consult-ls-git-autoloads > >> paredit-autoloads clojure-ts-mode-autoloads cider-autoloads > >> clojure-mode-autoloads queue-autoloads spinner-autoloads > >> sesman-autoloads chatgpt-shell-autoloads shell-maker-autoloads > >> cargo-jump-xref-autoloads breadcrumb-autoloads > >> bookmark-in-project-autoloads bookmark+-autoloads babashka-autoloads > >> parseedn-autoloads parseclj-autoloads aidermacs-autoloads > >> mediawiki-autoloads markdown-mode-autoloads treemacs-magit-autoloads > >> magit-autoloads with-editor-autoloads nerd-icons-ibuffer-autoloads > >> treemacs-nerd-icons-autoloads treemacs-autoloads pfuture-autoloads > >> cfrs-autoloads cnfonts-autoloads burly-autoloads compile-multi-autoloa= ds > >> form-feed-st-autoloads google-this-autoloads echo-bar-autoloads > >> zoom-autoloads fcitx-autoloads eat-autoloads vterm-autoloads > >> chatgpt-autoloads polymode-autoloads ox-reveal-autoloads > >> htmlize-autoloads wordreference-autoloads explain-pause-mode-autoloads > >> weather-metno-autoloads display-wttr-autoloads kdeconnect-autoloads > >> emms-autoloads crux-autoloads pest-mode-autoloads popwin-autoloads > >> modus-themes-autoloads blackboard-theme-autoloads > >> standard-themes-autoloads nimbus-theme-autoloads tok-theme-autoloads > >> danneskjold-theme-autoloads srcery-theme-autoloads > >> subatomic256-theme-autoloads iscroll-autoloads xml+-autoloads > >> multiple-cursors-autoloads evil-textobj-tree-sitter-autoloads > >> evil-numbers-autoloads ctable-autoloads color-rg-autoloads > >> line-reminder-autoloads fringe-helper-autoloads ov-autoloads > >> solarized-theme-autoloads sqlup-mode-autoloads bm-autoloads > >> zen-mode-autoloads sly-autoloads expand-region-autoloads > >> highlight-defined-autoloads base16-theme-autoloads > >> idea-darkula-theme-autoloads hybrid-reverse-theme-autoloads > >> material-theme-autoloads doom-themes-autoloads nyan-mode-autoloads > >> organic-green-theme-autoloads inkpot-theme-autoloads > >> github-dark-vscode-theme-autoloads almost-mono-themes-autoloads > >> cyberpunk-theme-autoloads soothe-theme-autoloads zenburn-theme-autoloa= ds > >> mindre-theme-autoloads kaolin-themes-autoloads > >> tron-legacy-theme-autoloads wildcharm-theme-autoloads > >> atom-one-dark-theme-autoloads parchment-theme-autoloads > >> autothemer-autoloads visual-fill-column-autoloads > >> transpose-frame-autoloads gameoflife-autoloads docker-autoloads > >> aio-autoloads dockerfile-mode-autoloads emacs-everywhere-autoloads > >> cus-dir-autoloads dumb-jump-autoloads popup-autoloads > >> bing-dict-autoloads hl-todo-autoloads atom-dark-theme-autoloads > >> ef-themes-autoloads uwu-theme-autoloads vagrant-autoloads ag-autoloads > >> alarm-clock-autoloads pinentry-autoloads hackernews-autoloads > >> notmuch-autoloads fussy-autoloads flx-autoloads affe-autoloads > >> consult-autoloads clang-format-autoloads apheleia-autoloads > >> elisp-autofmt-autoloads vimrc-mode-autoloads mpv-autoloads > >> gnuplot-autoloads mermaid-mode-autoloads atomic-chrome-autoloads > >> websocket-autoloads restore-point-autoloads ace-window-autoloads > >> avy-autoloads olivetti-autoloads super-save-autoloads helpful-autoloads > >> elisp-refs-autoloads solidity-mode-autoloads git-timemachine-autoloads > >> web-mode-autoloads adoc-mode-autoloads go-mode-autoloads > >> js2-mode-autoloads rust-playground-autoloads evil-collection-which-key > >> which-key super-hint-xref super-hint-rg super-hint evil-collection-xref > >> xref evil-collection-rg rg piper ob-shell ob-gnuplot ob-C > >> evil-collection-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp > >> org-macro org-src evil-collection-sh-script sh-script executable > >> ob-comint org-pcomplete org-list org-footnote org-faces org-entities > >> ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold > >> org-fold-core org-keys oc org-loaddefs org-version org-compat org-macs > >> molecule-mode lsp hyperbole hideshow gptel-manual-complete > >> evil-collection-gptel gptel windmove evil-collection-flycheck flycheck > >> erc erc-backend erc-networks erc-common erc-compat erc-loaddefs > >> evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff > >> ediff-help ediff-init ediff-util dired-x consult-ripgrep-all desktop > >> frameset server evil-collection-eww eww vtable mule-util url-queue > >> mm-url evil-collection-gnus gnus nnheader gnus-util range epa-file > >> evil-collection-epa epa derived epg rfc6068 epg-config saveplace recen= tf > >> tree-widget winner edit-list refine loop list-utils prompts file-info > >> browse-at-remote f image-roll evil-collection-image image-mode exif > >> toc-mode rst scratch sql evil-collection-view view persistent-scratch > >> exercism persist async-await iter2 generator promise url-http url-auth > >> mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw > >> nsm promise-rejection-tracking promise-finally promise-done > >> promise-es6-extensions promise-core async request mailheader mail-utils > >> a indent-bars evil-collection-outline noutline outline mode-line-bell > >> powerthesaurus jeison dash s evil-collection-ripgrep ripgrep > >> evil-collection-wgrep wgrep evil-collection-grep grep > >> evil-collection-vlf vlf vlf-base vlf-tune gptai ctrlf hl-line > >> nerd-icons-completion nerd-icons nerd-icons-faces nerd-icons-data > >> nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon > >> nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon > >> nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octic= on > >> nerd-icons-data-pomicon nerd-icons-data-ipsicon disable-mouse mingus > >> libmpdee evil-collection-mpdel mpdel mpdel-browser libmpdel-directory > >> mpdel-playlist mpdel-tablist mpdel-song mpdel-core navigel > >> evil-collection-bookmark bookmark evil-collection-tablist tablist > >> tablist-filter semantic/wisent/comp semantic/wisent > >> semantic/wisent/wisent semantic/util-modes semantic/util semantic > >> semantic/tag semantic/lex semantic/fw mode-local find-func cedet > >> libmpdel tq time-stamp posframe esup esup-child benchmark > >> ssh-config-mode jq-mode json-mode json-snatcher js c-ts-common treesit > >> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine > >> cc-vars cc-defs evil-collection-yaml-mode yaml-mode toml-mode conf-mode > >> align highlight facemenu nix-mode ffap smie nix-repl nix-shell nix-sto= re > >> evil-collection-magit-section magit-section cursor-sensor llama nix-log > >> nix-instantiate nix-shebang nix-format nix sudo-edit tramp trampver > >> tramp-integration tramp-message tramp-compat shell pcomplete parse-time > >> iso8601 time-date tramp-loaddefs evil-collection-devdocs devdocs mathj= ax > >> evil-terminal-cursor-changer evil-visualstar evil-commentary > >> evil-commentary-integration evil-collection-evil-mc evil-mc > >> evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make > >> evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars > >> evil-mc-known-commands evil-mc-common evil-exchange evil-lion evil-args > >> smartscan timeout ess ess-utils ess-custom evil-collection-unimpaired > >> evil-collection-vc-git evil-collection-tabulated-list > >> evil-collection-tab-bar evil-collection-simple evil-collection-replace > >> evil-collection-process-menu evil-collection-package-menu > >> evil-collection-minibuffer evil-collection-man evil-collection-kmacro > >> evil-collection-indent evil-collection-imenu evil-collection-help > >> evil-collection-flymake evil-collection-elisp-mode evil-collection-eld= oc > >> evil-collection-elpaca evil-collection-dired evil-collection-diff-mode > >> evil-collection-custom evil-collection-compile evil-collection-comint > >> evil-collection-calendar evil-collection-buff-menu evil-collection > >> annalist sqlite3 sqlite3-api treebundel vc-git diff-mode track-changes > >> files-x git-link dired dired-loaddefs texfrag face-remap shr pixel-fill > >> kinsoku url-file puny svg dom preview latex latex-flymake flymake > >> project compile text-property-search comint ansi-osc tex-ispell > >> tex-style tex dbus xml crm texmathp auctex display-line-numbers > >> elec-pair lisp-mnt package browse-url xdg url-handlers xterm-color > >> edit-list-autoloads refine-autoloads list-utils-autoloads loop-autoloa= ds > >> prompts-autoloads file-info-autoloads hydra-autoloads lv-autoloads > >> browse-at-remote-autoloads image-roll-autoloads > >> saveplace-pdf-view-autoloads pdfgrep-autoloads toc-mode-autoloads > >> scratch-autoloads persistent-scratch-autoloads exercism-autoloads > >> a-autoloads request-autoloads async-autoloads async-await-autoloads > >> promise-autoloads iter2-autoloads persist-autoloads > >> indent-bars-autoloads rainbow-delimiters-autoloads > >> rainbow-mode-autoloads mode-line-bell-autoloads powerthesaurus-autoloa= ds > >> hydra lv jeison-autoloads ripgrep-autoloads wgrep-autoloads > >> vlf-autoloads gptai-autoloads popper-autoloads ctrlf-autoloads > >> nerd-icons-dired-autoloads nerd-icons-completion-autoloads > >> nerd-icons-autoloads disable-mouse-autoloads mingus-autoloads > >> libmpdee-autoloads mpdel-autoloads libmpdel-autoloads navigel-autoloads > >> tablist-autoloads posframe-autoloads esup-autoloads quickrun-autoloads > >> ht-autoloads ssh-config-mode-autoloads jq-mode-autoloads > >> json-mode-autoloads json-snatcher-autoloads yaml-mode-autoloads > >> toml-mode-autoloads highlight-escape-sequences-autoloads > >> highlight-autoloads highlight-numbers-autoloads parent-mode-autoloads > >> nix-mode-autoloads magit-section-autoloads llama-autoloads > >> sudo-edit-autoloads attrap-autoloads f-autoloads dash-autoloads > >> s-autoloads devdocs-autoloads mathjax-autoloads > >> evil-terminal-cursor-changer-autoloads evil-surround-autoloads > >> evil-visualstar-autoloads evil-commentary-autoloads evil-mc-autoloads > >> evil-exchange-autoloads evil-lion-autoloads evil-args-autoloads > >> smartscan-autoloads timeout-autoloads ess-autoloads > >> info-colors-autoloads evil-collection-autoloads annalist-autoloads > >> sqlite3-autoloads treebundel-autoloads git-link-autoloads > >> texfrag-autoloads auctex-autoloads tex-site xterm-color-autoloads ispe= ll > >> which-func imenu man ansi-color autorevert filenotify cal-menu calendar > >> cal-loaddefs advice evil evil-integration evil-maps evil-commands reve= al > >> evil-jumps evil-command-window evil-types evil-search evil-ex > >> evil-macros evil-repeat evil-states evil-core comp comp-cstr warnings > >> comp-run comp-common rx evil-common thingatpt rect evil-vars ring > >> undo-fu goto-chg evil-autoloads undo-fu-autoloads goto-chg-autoloads > >> transient pcase format-spec transient-autoloads general memoize > >> sanityinc-tomorrow-bright-theme color-theme-sanityinc-tomorrow color > >> minions compat general-autoloads memoize-autoloads > >> color-theme-sanityinc-tomorrow-autoloads minions-autoloads > >> el-patch-autoloads el-patch el-patch-stub edmacro kmacro vc > >> vc-dispatcher cl-extra help-mode elpaca-use-package use-package > >> use-package-ensure use-package-delight use-package-diminish > >> use-package-bind-key bind-key easy-mmode use-package-core > >> elpaca-use-package-autoloads elpaca-log elpaca-ui elpaca-menu-elpa > >> elpaca-menu-melpa url url-proxy url-privacy url-expand url-methods > >> url-history url-cookie generate-lisp-file url-domsuf url-util url-parse > >> auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x > >> map byte-opt gv bytecomp byte-compile url-vars mailcap elpaca-menu-org > >> elpaca elpaca-process elpaca-autoloads early-init cus-edit pp cus-load > >> icons wid-edit cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc > >> paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode > >> mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd > >> tool-bar dnd fontset image regexp-opt fringe tabulated-list replace > >> newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar > >> rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock > >> font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq > >> simple cl-generic indonesian philippine cham georgian utf-8-lang > >> misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms > >> cp51932 hebrew greek romanian slovak czech european ethiopic indian > >> cyrillic chinese composite emoji-zwj charscript charprop case-table > >> epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button > >> loaddefs theme-loaddefs faces cus-face macroexp files window > >> text-properties overlay sha1 md5 base64 format env code-pages mule > >> custom widget keymap hashtable-print-readable backquote threads dbusbi= nd > >> inotify dynamic-setting system-font-setting font-render-setting cairo > >> gtk pgtk lcms2 multi-tty move-toolbar make-network-process > >> tty-child-frames native-compile mps emacs) > >>=20 > >> Memory information: > >> ((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0) > >>=20 > >> (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0= 0) > >> (buffers 1000 0)) --nextPart9866453.eNJFYEL58v Content-Disposition: attachment; filename="rust-ts-issue.png" Content-Transfer-Encoding: base64 Content-Type: image/png; name="rust-ts-issue.png" iVBORw0KGgoAAAANSUhEUgAABgIAAATbCAIAAADUHznEAAAACXBIWXMAABkRAAAZEQGQh6VoAAAg AElEQVR4nOzddVgU2xsH8DOzu3QjDSJYKCUWiqjYfe3u7rx2t9fubq/t9drdSCNlYFLSHbvkxvz+ WF1XWJYl9f74fh4eH3d24j1zZgfm3ROEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUHlWB +7KuU9fQyNjYxJTH5RoaGVfgngEAAAAAAAAAqo+kxAQNTc2EuLikxITwsM8VtduKSQMZmZi0atM+ PzcvIzOTzxfwBfwK2S0AAAAAAAAAQPXEYXM4SmxtbW0VZWWP50+TkhLKv88KSAMZGBk3bt4iLTVd IBCUf28AAAAAAAAAACDB5rD1dfX8/bxSkxLLuStWObfX0tZ2bds+Pj5RJBKVc1cAAAAAAAAAAFCI SCTKzs62s7WPi40uKMgvz67ocobSsUuPhISkcu4EAAAAAAAAAADkSEhK6titZzl3Uq40kHWduvl5 +egLBgAAAAAAAABQqfh8fkF+gZV1nfLspFxpIEMj4/TMrPLsAQAAAAAAAAAAFJGRkWlZy6o8eyhX GsjYxFTAx6RgAAAAAAAAAACVji/g6xsYlGcP7PJszONySzs3vBpb3Uqtnp6ygQZbmxDCE2Sm5SdH 5HzKEWSXJxIAAAAAAAAAgP9vfD6/oKBczXHKlQYyNDJOTc9UcGUzVUuXGp0sVK2oIrPUM4SJzo3w SnkUmxtVnngAAAAAAAAAAP6PaWpqlmfzcqWBFKREKXU07l1fw4EQwjAiRtY65iqWg8wnfOC+eZJ4 vYApqIKoAAAAAAAAAACqlUpPA2mytf8wGaavZCQUCUtcua56Qz1z/Zvx57kCRRsZKY7D4ZgYG32N jqnwPQMAAAAAAAAA/P7KNUR0iZQopZ7GQ3U5BiJGJPkhLCL9UsSIWCq0dRtj+96WJva6uhyDnsZD OJRSxUbC4XA2rlt94ujBenXLNbMaAAAAAAAAAMB/VOWmgdrW6K7D1heKhOIf3Vrq/fe0Gn7Sbeix tn22t+ywqJHzuPq2PS1MHHVpDnHob9V+gaNuA2Uddo22NbpXYBjiHJBbG1dtLa0De3ciEwQAv609 O7b6e70wMzP91YGUjqamxu1rV1avWPqrA6kKf5886v7kwa+OQobmzZocO7T/+aO7zx/d3b5l468O B36l0SOH+Xu9+KNnRf41Bb+tmhbmmzeuvX/7msezh5fOndbT1S3bfjauXeXv9UJfX6+iAwQAqO7Y bLajg538dRwd7Njsqhi0p3I7hRkrm1ur2oik+oLpWKiranMYkYjFoXJ5uakJqRo6atb1jbQM1Sma YkQiQghRE3LzMmqr2rxVNkvIjy1/GJIckPilOBM0bebcT5+/lH/nAAAVKzEpiRCSkpJa9K1ePbqH vn8fFh7xK+IqgaqKqoFBjZoW5pIlNE2PHzPq3IVLObm50mv+zqX4T7O2qrVnx1Yej3fl6nWRSJiW nlGx+y+uQsvpF14P8+bMHDpoQNHlW3fsvvzPv1UfT8VKSkomhKSkyriTlJmurk7Xzp3au7UxMTbW 1dXlZfNSU9OCQ948fvo0MChEvI74rH7+EjZy7EShsPBoAI/v3YyMip4wZbr45chhQ2bNmLps5dqH j58UWtPRwf7YoX1nz1/ave+AzGD+v6tPomljJxVVFQ9PbznrcDic/bt3GBjUuHn7bnJyipaWZlp6 ehXGCADw/4bD4Yhn46rAfdo2tDl2aP+R4yePHj8lc4WJ48dMGj92wpTpIa/fVuBxi1OJaaAm2q1E zE9/AUT4xTsNqK2qrcQwzJG5lwryvp1ZNodlWFPfqFaN/Gx+VEgCERGKkCbare4kXS5nDIVyQGLi TNC4iVMxThAA/A6UlJQ4bHZ2Tg4hJDk5hcvl5efni9/S1dVJT88Qr7Pwz9nrNm75PRMoScnJg4aN ysj4Maybo4P9pAlj/71xUzpr8JuX4j/NrU1rFou1fdfeew8eVcb+ZVZoOf2S60FDQ4PH40lePnvu XihX8vlLWJUFUyqqqir5+QUi8XdmxdDT1RWnAMQJ5eTklELLy6ydW5tlixdoa2nFJyS8eRfK5XL1 9HTNzcwG9u8jEgklaSCxunVqjx4x7MTpv8tzREX8h6qvbMaPG/31a7T8NFADm/rGxkbXb97euHlb FYYGAPD/icPhbNm0jhCycMmKCswEhbx+e+T4yUnjxxJCimaCxDmgI8dPVk0OqBLTQCosVUOOmfDn P1ZysvIe7wrouqQZi8OybmIe6vHtV7WATyWEpydHZtI0TRMWTdE5glwdloEKSzVPWPY/N2XmgMSC gl/HJySWec8AABWokaP97u1bgl+/8fLy4XA4WVlZ7dzatGrZwqWlc0RE1PTZ8wghrVu5qKio/OpI 5Yn6Gi39smN7t6Lr/P6l+O/S0dEmhIRHRFbS/mVWaDlV8fXQskXzyRPG3b3/ULq1yLmLl0Nev6my GMqjoY3NsiULjp88c+/BI5nJICUlzr1b/4aFR3h4eUdGRhFCLGtadO3csZVLCwtzi9btO8tPIcnh 6tJy84a1mZlZC5Ysf/7ipfRbhgYGBfyfJngtKOAnJSWNHzvqybPnhW4LFe4/VH1loK+v5+To8LWk c6iro0MIiYz6WlVxAQBUhaaNnWgW7ecfUOKazZs1EQlFrwKDyn9QcQLB1aUlIWTjutVLV6yuwEyQ OPtTNBMkyQEV11CoMlRWGshMyVLm3PBx71NurPDsOKdJ7zkdUmLSEyJSaJqmKIqiGEIRwhBCEUIR ipACYb4pxzJc+KFUx+3Vo7uDve3mbTspiiouB/Tc3aNiaxQAoDxEIuZVQKCuru6gAf0MDQ1oml6+ ZGFqampMTKz4IWrtquVdOnUghGxYu3LD2pWEkD37Dv59/qJrq5Y7t/41bNQ4oVA4b85MR3u7hMSk gUNHEkKUlZVHjRjapVNHE2OjrCyut6/fkeMnE35Of/fo1mXQgH61alny+fzQ0A8nTv8dHPJaTpw6 Otojhg5xa9va2MgwLz8/ISHRw9P79Nlzubl5aqqqL57c9/Dynjt/sb6+3vbNG20bNiCE3L91Tbzt qHGThg4eKLMUJQYj3vmOXXtv3b0/d9b0tm1cVZSVBw0bHRcfXzRIOQVfsXTRHz27r93w160798Qr 0zR97NC+Bjb1x0yY8vHTZ/H5HD1+sqmJ8ZhRI2pZ1szLz/fze7X/8NHY2Dg5Z8bIyHD8mFEuLZ31 dHXTMzJ8/V6dPH02OuZHg9PZM6b17tWjfZcerV1dpk2eaFnT4vbd++Kv7o2NjSaMHd2yRXMdbZ3E pMSHj56ePHNW0hxMzoYSjg720yZPbORoTwg5e+qYuHFWj97f+st069p5YL8+tWtbMwwTFfX1+s3b 12/eZhhG8XNbXIW+//CxxCuNxWL16/PHHz27m5mastispKTkwKDgs+cvRcfEFHdVFzq3ciKsbW01 esQwp0aOenp6WVlZX6Nj7j98dO3GraIV1MK5+eQJY+1sG4a8fhsYFCynKqX9ffJocnLK+k1bZkyb 1LpVKxUV5YjIqOMnz7x46eFgbzdpwlg724b8Av6Hjx/37D8k3QjFxNi4zx892rZpbW5mSlH01+jo S1euXr95W3rnBjVqjB09spWLcw39GlwuNyIqaufufZ8+f5FzxiK/fg2PiFy1fMm4MaOOnzx9/+Hj QmkdTQ1NTy8fXV2dTu3bGRoaEEJWLV+SnJKSkZHp6+evoa6exeUqWHZpKioqq1cu5fP502bNLdrW Jik5udASDoe94a+tB/buXLZ4weTpsyUXWxX73aqvaIQ0Tbdt49qrezdb2wbaWlpZWVz/gIA9+w8l JiYRQoYMGjB18gTxDvv1+YMQIr7BSu+hRg39BfNmt3R2JoTMmTltzsxphJB+g4aLD+foYDdu9Cjb hjZKSsqRUVFXrl6/deeu9Ob2drZTJo63s2vIMMz79x8OHD5WIOtvY/n3kOJ+DckvHQBAidq2cR3Y v++SFaufPXeXs1o7tzab1q2+cvVa+dNA4hxQ61YtFy5dQQjZtG51FWSCfkkOqBLTQFosneJmiE+K SL+69IXb9Maj/+r377aHYa9iGIoQQghDCCEMxRCGYQihCKPJ0irtcdMz0v/o2V1HW5ui6batWxVd ATkgAPjdvAoIfBUQKP6j/OjBvampaa8Cg5avWitZwcvbRyQS9ejW5eq1G+9C3xNCxP+KNXJ0mDxx XGZm1rMXL8X9IzgczoE9O2wbNnj05Nn9h4+MjYy6dencxtVl1LjJksf72TOmjRg2+FVA4NnzFzXU 1Tt37HB4/+5FS1c8d/eQGSRN04f377GsaXH/4eO79x/q6mg3sKnfuVP7I8dPFlpTwBdcvXaDEGLb sMGOXXt52dmEkLj4BDmlUCQYY2Oj/bu3m5ma+Pm9YrPZySkpRYOUX/Adu/Y2beI0d9YMX79X4mfX 4UMG2dvZHjxy/OOnz5KdTJ00vrGTk/tLDx9ff2urWp06tm/apPHo8ZPjExJknplaljUPH9ijpan5 /MXL6NhYI0PDzh3bt2vbetqseeJEiZimpka3rp1XL1/y9l3ooyfP3rwNJYRYmJsfPbSXw+Hcf/Ao IyOzgU398WNHOTdvOmnaLMnvKZkbSuNyubfv3uML+M7Nmh45djIhMTH3e7+tP+fMHDJoQGTU1+s3 bglFohbNmy1dNN+pkePKNeul9yD/3BZXoYpcaQvmze7ft7ev/yv3l57KysrWVrW6del85uz5Eq/q QopGaG5udvLoofz8/PsPH6VnZBobGTo5Otjb2RZKAzk3azp54jh7O1tvH7+JU2fKT3QWVaeO9YG9 O/l8/r2Hj7Q0NTt3bL/1r/X7Dh6ZNnmCf0Dgteu3zM1M3dq2trez7T94RGpamnirdm5tRo0Y5u7h +eDhYw1Njd69eixbvCAvL+/+w8fiFWpamB8/fEBHRzswKMTL21dPT9fBzk7cp1LOGUtNTZu/aFlt a6sxo0Z8SwadOvNAKhmUmpY2b+EScef3c6ePs9lsXnb2qLETy9mPr2N7N20trcv//KtgfyuKot69 f//v9Zv9+/bu80dPmYm5qvFbVV9RNE0vXTg/i8u9e+9hVlZWYyfHzh071K1Te8iIsSKR6EtY+KnT Z6dNmRgQFHzn7n1CSEJi4WbsfL7Aw9M7OTll8MD+Dx498fXzJ4SkpaURQtzatt60bnVMTOyNW3cE AkErl5Yrly2qbV1r195vYy01bdJ4z44tQqHw7v2HKSmp1tZWB/fuLNp6S8F7SNFfQ/JLV0E1DAD/ z/bsP2RsbLxp3Wo5mSBxDuilp/ee/YfKeThJDkhyuCUrVld2Jkj8n6rPAVViGkiZVpMMDMRi01bN TKxamNaopa2up0pRpCBHkJnAY7HI0JXd3S8GeF0SfzXHMBShxU2CGBFD0SqUWmmP6+HpvWzlmg1r V1EUVfRd5IAA4LelqamxYe3Kd6Hvr1y9tm71ioDAIMnj0/2Hj9XV1Xt06xIYFFJ0LNW5s6ZfvHJ1 7/5Dkq9nRw4b4mBvN2veAm8fP/GSB48eH9izc+rkCStWryOEONjbjRg2+NSZc/sPHRGvcOrvc1fO n5k/b7a7h5fMv9Hr1qltbVXr3IVLkqcI8a/MoitnZmXdunOvpXNz24YNHj55mpqaJr8UCgYzsH/f 12/f9R4wNDs7u7hzKL/g2Tk5a9ZvOrRv95JFf86dv9iypsXkiePevgs9deas9E6aN2s6btI0SUpi xLDBs2dMmzlt8tKVa2QedPmSRXq6utNmzfV/FShecu7CpdPHD69duWzQ8NHSTSGWLvyzUG5r0YK5 LJo1bOQ48UguhJDJE8ZNGDe6Z/eu0g/PRTeUFh4RGR4RWbduHedmTV+89JBMgNC8WZMhgwa8Cgya OWe+QCAghOylDm1cu6pbl04ent7SVSD/3BZXoYpcaV07d/zw8dOM2X9KNuFwOOLfwvKv6kKKRtjG tZWqqsqyVWteenhJ71zy/+bNmkyeMM7OtuHT5+5/jR5f3LwQQwYN6PBzf7f9B49IWmOZGBs/fvp8 2co14uvQ189/7arlM6dN3r3vwNnzl8TrTJsyceyoEe3btbly9bp4ya07d588fS6p0+cvXp44cqBH ty6SPMKKpYt0dLRXrllfdCAnOWdMLCw8YsXqdYePnRg1fOiKJQvHjR55/OTph4+fSn8Sly9dpKWl NWHK9NPHDy9ZNF9cF2Xm1MiREPLs575g8ilxlPbuP9SqZYtZ06e89PSSOeZ9hfjPVZ80gUAwefqs yKiv4vBOnjm7d9e2Fs2bNWxg8/Zd6KuAwJTU1GlTJkZFfZU0YCwkMzPz1p17XC538MD+70LfS1ZT V1dftmjB23ehU2bMEQ/UffjYyQN7dw4fOvjajVviXM+i+XM5HM7UmXMk41D06tFt5bKfWhspfg8p +mtIfunk1ioAABGP0Lx0xeqN61YXlwmS5IDK/4BfNAckHn6uCjJBvyQHVIkTxgtFQqFIJBSJ2Kqs botbuE1vbNnEWF1flVAkLSEr4k30p+AIj6tBz8/7M0LGpK4BYSiGoQhDRAxhRIyIIQzDCMr0dYH4 Vz7DMIXaISMHBAC/s6WLFpgYG1+4dOXh46dfo2P+nDOztrW1IhtGx8TuO3BY+o7Xs0fXyKiv4eGR RoaG4p+vX2PS0zNaNG8mXqFXj27iJ3bJCkocpZA3b40MDWtZ1pR5lKwsrrj/kbq6umRhhdxRFQyG pukVq9bJyQEpUvDAoJALl664urTs1aP7ymWLGYZZtXZDoUyWl4+vdLOUy/9cy8zMbNO6FYvFKnrE mhbmjg52gUEhkhwQIeTT5y+PnjyrVcvSwd5WeuXbd+9Lp3KMDA2bN23y0tNL/H/xj39AACHEuXlT ORsqqFeP7oSQY8dPiZ/fCCEMwxw8coxhmN69ekivqci5lanEE56ZlWVmampZ00KySdmumaIRZmVl EUJaNG9G0z/+kpHs/Nih/ft2bY+IjBo4dOSS5avkzA3asb3b0EEDpH+UlDjSK5w5e15yhbi/9CSE ZOfkSI8uJM5DmZqYSpZwuTxJEoEQ8ubtu9zcPENDQ/FLc3OzRo4OIa/fyBzMW8EzFhMTu3Hztj4D hnr7+K5YuujS2VOSSb4H9u/r1sb19t37nz5/uffgYdfOHfv80bO44ivCyMiQEBL/cx/MaVMmLl+y UPKjpqoq/S6bzc7OydmweZuGhsaiP+eW5+jy/UerTyI8IlL6/uPvHyC+G5TyNBTWxtVFR0f77v2H NfT1xR9Mgxo1fHz9xGluQkid2ta1LGsGBoVIj0V69/7DQuOIK34PKfprqPJKBwDVhzgT9NLTe9O6 1e3c2ki/Vdk5IDFxJqh1q5Yb162W/qrp/0BltQbKFnDFrYHquloZ1dcT/2LI5eb9veZ69Pt4mqZZ FJumaJpm0YSmKZqiaZowhBBK3DeMiBiGzhHxSjyQTI+fPu/Q3q1j+3YMw4ibBSEHBAC/M5qmQ0Pf W5ibPXvxUiQSnf77XJdOHb/1lS2Jh+dP7Xc0NDQszM0JIbevX5F5IJFI1LCBDSHkwt+F+3MRQvT0 9MIjIufMnKakpCRekpXFPXT0eHxCwvmLl4cNGXTz30vXb9y6dvN2TExsOUr8Q4nBiP//4eMnmR3B JBQpOCFk/6GjLZybL1+ygKbpLdt3Fp0yMizsp1mrCgoKPn0Oa9a0sYmJcdEi16tXlxDy+k3haR1e v3nbrUunenXrSj9liTM+Ejb161EU1atHN3EiTJq+np70y0IbKqh+vTqEkDc/f/H+NTomPSOjXt06 0gtLPLcyKXLC9+4/tHbV8otnTz168uzqtetlnv+iaISPnz7v80evQQP6tXBu/s/Va3fuPZAe+CY3 N4eiKDvbhs2aNklOScnNzStuzxOmzJA/xrD0qNvZOTkikSghIaGg4MefE1wejxCirKwkc3PxAIiZ mZmSdFVtKytCSHEHVfyM0TTdwKa+tbUVh8PJzcuT3C0SE5PCIyIv/3OVEHLqzDk724aS7k5FFf2k yzgQRRNCKPqnLw47tW9nbm4mebnv4OGfup5RhBDi4+t3687dXj26t3dr+/T5i+JiKI//bvUVQlEU TdOZWVniEbUU3Ko4DWzqE0KWLppf9C09XV1CiLWVVdEbl1AoDA+P0GuiK1mi+D2k0K+hQiq2dABQ rchsE1Q1OSCxymgTJBkPSOaI0VWjstJAmYJU8dhA6YlZou9fDnwJio4KjaUpmjA0QxGGEHGLHRFF WAwREUITkYihKIqmCCFExOUX+4eLfBPHj+nYvt3jp8/au7UlhLh7eCEHBAC/M5FI9Pf5i2cvXBIn zW/duXfz9l0FtiOEEOlp2gkh2tpahJCPnz7LfKIT719bS0sgECxYsrzoCl/Cwggh/fr0VlX9NoVT UnKyeFc79+x/6ek9avjQEcOGjBw+1NPLZ+eefUXTKKVVYjBi6RkZJexHgYKL0zq37tydPWNadk7O nbsPiq7J5RUeRlf8FK0qa04rcSOIjMzMQsvT0tIJITra2tIL09N/KoI44Nt37z959rzQ5uK2V8Vt qCA1VbXsnJyCgoJCy9PTM6xqWf60pKRzK5MiJ/zx0+efv4SNHD60S6cO3bp0+hIWvnvfQXGrhFIp GmFeXt6kaTN7du86ZNCAeXNmTp866frN2wePHBe3GJo5d4G1Va0hgwbMmz1jxtRJt+7c++ff62W4 VvPy8iQ9jCR4vBz5W9nb2Q4dNMDOrqGhgYHkoVcykZP4vBV3zhU5Y7q6On169ezX5w9DQwP3l56T ps2SHvPI3cPzpaeX+Px/jY4ZPHyMnEGaZX7SC0lJSSGEGBsaSqdB+w4aJv7P3p1bWzg3L27/O/fs b+HcfMG82f4BAVwur9AEskxJme4SV5Dv96w+CVVVlSEDB7Rt41rLsqaamprM0QzKRltbmxCye9+B otOHiStRTa2YG9fPrYEUv4cU+jVUqaUDgOqmUCZIPHhzheSACCGzpk+RkwMSk2SCZk2fsn3X3nIe seiY0L8kE1RZaaBkQUKeIFeJpRQeEBPy5KND+3qEkAYu1s17OAQ9eE8YhhLPCcYQQjMUYRiGoSgR w9CEEjcFogQiQbJQ9nic8kmf2Y7t3TasXcWIRL9qogoAAMVJ7lTluWVxs7jiLzc8PL2LXYfHMzIy fBf6vrj8QpsOXWQuF49mbWpiMnTwgIH9+9rbHRg8fIyctgYKBVxSMIruR4GCi+e3Hjd6VEpKao0a +rNmTP1r645CK+ho6xRaoqWpSQiROc6u+OFHPGGzNH19XUIIT243K3HrldzcPPkBl1lGZqaRkaGy snKhJ2E9Xd2cnBKehBWh4AmP+hq9ftOWXXsP/NGz+7gxI3dv3zxr7gJf/1flD0AkEt28fffm7bt2 tg0njBs9eGB/m/r1JkyZIX43PCJy4+ZtBw4f7d+398B+fYcMGuDj63/5n3+9fHwVH6G2DB/ENq6t tv61PjEp6dyFy2HhETk5OQzD7Nq+WbKCuPmJtpZ2cXuQc8ZsGzYYNKBfx/bt+AL+zdt3L13+JzZO xnx50jcQ+TeT4j7p0t68C+3WtbOLS4syTMLC5fI2bdm+Y8umWdOnbvhra6G/13Nycgkh+nq6RTes oa9PCOHxSt1RUdrvVn3SaJo+uHeXbcMGt+/eP332fEpKqkAgaNvadfzYUaUOughxl0nxZI4yVxCf eS0tzULLNdQ1pF+W+R5SqaUDgGpIkgnasnFdxXb0eeHu8dLTq8Rp6Z89d581b4FIWN4R7ovmgIqb Rb6yVdbYQAUkPz7vq1AkEgpF7keC7h54ISgoIITpMbndtP3DHTo0UNFQYRgiIhRhiHhUoFpOZmo6 KgwjTtowCfkx+aTYVtzFKXRmxeMEtWndatH8SuyaDgBQ2cQPrjRd8heqWVxufEKCZU0L6S4bhXz4 +IkQ4tLCuWzBxMXHb9+198Cho9ra2q1cWsgOmGEk3Ul+LJRVinIGI6FIwSmKWrFskbq62vzFy27e vtu/b+9WLQvHX79eXemXbDbbtqFNXl5efLyMbyY+fv7MMIyjg12h5fZ2dpKiFefz5y/iYYBoulJ+ F4vnKbO3+2l8opoW5rq6Oh+kZkZTUNEKVeSES/B4vPMXL8+au4Cm6e7dvqUeFL+q5Xv7LnTOn4s8 vX0cHezNzEyl38rIyDx+8kyvfoPWrN+kp6e7c9tf4rm3K8+woYNomp47f8mlK1dfBQSGvv/w8dNn dbUfU15ERn4Vj4wufz9Fz1gjR4dTxw41crTff+hIj94DduzaKzMHVOGePH1eUMAf0LePmalJGTZ/ 6eF1/+Hj3r16NHFqlJf3UzbhS1i4ZAjqQpo0diKEfFFsbrIKVHnVV0gjR3vbhg2ePXdfs37Ts+fu b96+e//hY6FsCyMSie9apS2FeDAsl5bF3lQjo6IIIQ1t6hdaXtPCXPplme8hipQOAKBUxJkgDy9v D6+KaQck9iowqMQckJiff0A556Qvbm74o8dPHTl+ctL4sRPHjynP/kulstJAhJDPBaH5glwRIxSK hJ+fxx6efdnv3uuCfL6OsVbP6W6zTo4csbFXl8kuTXra1m9l6dClbrtxTR261BUxDENEBcL8MH6p 5xGYNH5s0TP7+OnzPxctff3mXUWXDwCg6ohb71tbWymy8vUbt1ks1p9zZrLZP5p8cjgcU5NvT3HX b95iGGbyxHE1auhLbyg9smkhaqqqKj/3isrLzxf3sZIdcEYGIaT2zwHLLEUZgilOiQUf0K9Pi+bN Tp89/y70/c49+xOTklYsXaT9c9etJo0b1a1TW/Jy2OCB2traT5+7y2xCkpiY5JJIPFYAACAASURB VO3j18jRoVnTxpKFta2tO3VoF/U1Wv6oJbFx8b7+r2pamI8ZOVx6ubaWlo5OsW0NFHfj1h2GYSaM Gy09GMekCeMIIYp3OZSQWaElnnDxQCQS4udAydOgzOvBtVXLzRvXNijygFqIjo52ocdj8W4L8mVc kHw+/869ByPGTJgyfbaCs56Xk/Tc3u3atlFWVpa8jIiM/Pjpc2Mnx0JP6eKxJ+WcsfT09EVLV/Yd OOz8xctlGM+7zNLS0w8dOaaqqnJ4/57GTjJSNiXatnNPekbG0sULmJ8/RG/fhYaFR7Rza9O3dy/p 5c2aNu7Xp1diYpJ36fsPVojKqD6Z4hN+JJc5HE6hWc/EjQ3r1FZorgBpT5+7Z2Zm9ujWtVCKzcLc XJx0/vwlLCYm1rl5M5v69STvurVxLZTSLec9RH7pAABKi8/nL1yyYuGSFf/FwV4cHezkzA0vyQQV /WaxklRWpzBCCJekh2e/r6NuK/5DrSCZPDzs9eysr42zlZWDRS1Hc9N6hqb1fswXwDAk9lMSw4gY hkTkfshi0uXuXobef/Q4evxU0TNbSe3tAQCqTGBgcG5u3vAhg9XV1NIzMsLDI+UMuXrm3IVmTRu7 urT858LfXj6+AoHAyMiwiVOj6zfv7Dt4mBAS8vrtiVN/jx876sr5M89evMzIzKyhr29n2yAriztm whSZ+7S0rHlw704//4Cor9G8bJ5lzZpdOnVMTEx6WcwN1sPTe/DA/quWL7l+8zbNoh8+ehoWHi6z FGUIpmwFr2lhPmv6lLDwCPGvCR6Pt+GvrXt2bF266M9FS1dKdvLp85djh/c/ePg4OTmlXr26bVu3 Sk1NO3DoaHEH3bR1+7FD+3Zv3/LoybPomBhDA4MunTvmFxQUnYOsqA2bth49tHfq5AmtXV2CQ96o qCibm5k2aez056KlkinYy+ztu9BjJ09PHDfm/JkTL156CAXCli2a2zZs8Ojx03v3H5Z2bzIrtMQr 7Z+LZ99/+BgWEZGSklpDX69zpw4CgeDGrTvifcq8HsaNHmlvZ5ubm7d63UY58fTq3m3QgH4BQcFx cfFCkdDBzs6lpbO7h6f8sa4DgoILLRk5fEj3rp2llzx89KToaorz9PRu4tRo/ZoV/1y9zmKxGjs5 durYvlCznbUb/jpyYM/OrX+5e3jFxcXp6uo62Nlu3LLNzz9AzhmL+hotnuq76p29cElTS3PMyOGH 9++J+hodFh6enp6hpMQxMzWzs21Q4uaZmZlbt+/atH6N+OYjWS4SiZavWntw766li+YPGzzwS1g4 l8eztrJydLDjcnlLV64p8Q/9/1D1FfLx4+eUlNTef/SMiY2LjIoyNTEZ0K9PoR58mVlZb96+s7ez 3bJx3YePn/h8/t/nLypSiuzs7NXrNm3euO7Qvl3uHl5fo6N1tLWtrWrZ2TZs5dapoKCAYZjN23ft 2vbX4QN77t57kJqWZlmzZmtXl5DXbxwd7CX7KfM9RJHSAQCUwX8xAST2LvTDhCnT5UwdcPT4KT// V+9CP1RNPJWYBiKEhJOPStmq5mqW4kkjVNlqudk5wY8+hDz5xKIpDT0tfWMtHUNNms3i5wmi3yXk ZeYTisTlRoczZSl/j94DKqEQAAC/XmZW1rwFi+fMmt63d6/s7JwDh4vNShBCBALBjDnzBw3o171r 5+7duqgoK6ekpnp5+0oPRXzo6PHQ9x8GDezXupWLlpZmVhY39P2HW3eK/YI3Li7+1p17rVu5uLZq KRQKE5OSr1z99+yFS8W1SvDx89+2c8+wIQPHjBqenJIiHnivuFKUNpgyFJym6bWrlnM4nFVrN0j+ hvD28bt5++4fPbv37N719t374oU3bt3Jzs4eMWxILcuauXl5Dx8/PXDoqPQE0oUkJCSOGjtp3JiR bVq36tShXVYW98WLl8dPnVHkiT0+IWHEmAmjRwxv07rVoAH9CGHi4uKvXL0mZ4LzUjly7OTnL2FD Bw0Y1L8vm82OiIzavG3nv9dvlmFXMiu0xCvt1N/nunTq0KdXTw6HnZKSGhAYdObshY/fu5PIvB58 /Pzr1K7t/6qEFtpePn4NbOq3aN5MR0c7Jyc3Lj5+5579//x7rbTlatvatdCSsPCI8uQRzl64xGaz e/botvWv9Tk5OQFBwVNnzOnb+w/XVi0l63z6/GX4mAnjx4x0bt6sdauWOTm5Ia/fxMTElXjGfhWG YQ4cOvrC3aN3rx6NHO2dmzVVVVXNzctLSUl98uxFUHBIiYP4PH76vNPzF+KJO6R9CQsfPnr8yOFD XFq2aNO6lVAoSkxKunDpyvlLVxISEovZ2Q//3erLzsmZOXf+9KmTpkwar6KsHBMbd+3GrTv37j++ d0t6tWUr1y5aMLeFc3Nn52aPnzxTvCAeXt6jx08aNWJYk8aNWrdqmZefHxkZdeDQUcnU7z6+flNm zJk8cVyPbl0ZwoS+/zBzzvw6ta2l00BlvocoWDoAgOpDIBCUOH1kmSdULYNydcgfNmqcuNuwHMqM shXTwEzNkqa+NSjNF+YxjIgiNE1RFKHI939pimIYUVxudDgJzafQfxgAAKqUa6uWO7f+tXvfgbPn L/3qWAAAAAAAZGtgU//8mRNl3rxyWwMRQvKp/E/UGx4vy5RTU0NJmxDCpjh8hs8wIhGhKEJRDM1Q hCIibgEvnh8dw4oQkfIOwQ0AAFA2VPm+IAEAAAAA+J1VehqIECIiwhh2eJowyZBros3SU+Noclgc hqIYhhESIV8oyBNkc4XpSeyEbFZWFcQDAAAAAAAAAFANVUUaSCyH5kUqfWYzHPUCTbaQwyIcmhAB EQhY/GwWl8+SPdcMAAAAAAAAAABUiKpLA4kJKH4mO63KDwsAAAAAAAAAUN0hHwMAAEDEc6I3cyk8 kxEAAAAAwP8T+lcHAAAAAAAAAAAAVQFpIAAAAAAAAACAagFpIAAAAAAAAACAagFpIAAAAAAAAACA agFpIAAAAAAAAACAagFpIAAAAAAAAACAaqG8E8bn5+VWUCQAAAAAAAAAAFCJ0BoIAAAAAAAAAKBa QBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAA AKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAA AAAAAKBaQBoIAAAAAAAAAKBaQBoIAAAAAAAAAKBaqMo0EG0x8nhAoN9rqZ/gR0tbctRclvz7dF8/ c5oQouS2/tmrY4NNfkF6qrjwZK3LabrsgcelCdYsQgiRjr8KUWq1O03adPTSk5ceQX7u7rdO7Znf z1GvzEH8olKUz48qC/AJ8n769NrJPQsHNamhYBmUrLovOHH9sb+/p+fNFR11KEq38YQtZx+/9Ary vv/3BBtWZUdfVtOveL/++UIV/7za+4cuVea9/qqPHm0x8niAx7oOSj8tZdUef9n34RoXmR8/ab/w jgEAAAAAAPDfw67qA+YHHl16NkTw/SU//oNAYJEcF0Nn5Fd1KLLICK/EbQQ8qfhp0yHH9hjsGrL3 dckblgOl3WLu/l3DzBNeXjuz7V0Mj6Vn1aRb/3kn3JqumrLidoywxB0UifOnUvyX5AccnH8ySEBo JS2TBq0HD5930EFj+OgTn0s6B7RRz8XLeus++GvqskiikhOWyW6yYNW0Jl8PL5vimalMksNLPom/ yJ1Nf75RpwkhbJuBaydZem7fcSdWRAgRpX3mMr86OAAAAAAAAPiNVXkaSJgc6unhXvDTsvRjM0ZV dRzFkBVeSQpe/4ifNmrd1pYdWimxSVF3nrp6qEXY0amTDodmf1v24OoNn3WnNixZ8kfAzGvxIvk7 KBqndCn+U4Qpn/z9fMRV9vKpX47Z9ZkuLU1OfY4p6RSYW9ViRd+4eO/VJyEhhFD6Vlb6goC9p91f 51VJ4GUWGegVSQghhMNvXSAyjAr0dP/02+asAAAAAAAA4DfyO3SlkNOtg2Paatzm09dferp73D6+ aUwzg18VL6XRsP+ykzce+/u9fH5l2zQXfYYvee97/CxNl3lnLs9vrFpz5Fk/v9eBHru7q1VOMFpt +nc2Sr6797QkB0QIIaLk5/tOB3Ga9e1ViyZEyW39k0dLXOv3WHji5pNXvi+eXt42y82MQwihZMZZ qBbYJi7j/jp1zd3Lw/fp1dPrxriaSLrnKLmtf/JgoUv97nMP/nPf18fD49bxDcPstb91R6L1nIav O3bluadXoPeTR5f3r+lbp8SOPRWHycnJZZj8/AJCKL0BBzz8t3f5UQdsu7nXPW7MbMiitFpM2fvP 1v7GSrWnXPR+HfB8y9h+606fmt+Mo9Jxo1+gX+C5sda0nMtPyW3947vzGunZDf7r3F0f7/urXZVk Frzqyv2DnIor8V2J36Qs0hS5FRR/zQMAAAAAAAAhv6I1UClQWi3nHd7eKevfPQu3R1B1e82du20v Z+LIo5/4Cmxc1mOyldTU1L6dFYYR5OcWiAihTXuvO7TYNuLC7tlPohjjJgNnzm2uS8UW2pbJDjm9 eIXynu2t/BdOO/1BwOSm51ZKkKw6jWzVsgN9ggu3WhEl+fuGkYlODtpUeDYhdI1Oy7bUfXJux8L9 uTqO/adO3bxTedqYrQEy45R+WKZ0XRce29Y+69aRNfs/czXqdRk/cfcRs3mjNr5IF3c6og27Lt9m 73np4MpjGSp1e0yaM3djXvigdT65lE6HpdsnW73YvXzve65SjVp2TYxT0yq1exwhLLaSkjJFKJZq DWvX8UPtkx6sfpwstykQw3vzz8bZkZNPrrG5O3v+hShBbk4u5+HHmPVHxmfuGLTFu6AgK0kk//Kj 9R3HbGlnkHrryJpTaVHvBTILXrnllkF+xZVYrd/3UvVlodiqmpqaUq3wWOocqbGZFL8VFHfN51Ru /AAAAAAAAP8RVZ4GkpFnKWZN2qLf5F6Gr/dM2XYzVkTI6w88c6dTgwY5/73eo/I67ah22Py0w/cX DO/uArfl7gWsOn2HOSv5blm461aiiJCQ10Gp+tcO9SuysSg7NT6ZJ2QEvOS4uNjKS36w9Q11mZSE pKLpMGFSYpKQNjXQpUk2IYRWCTu3ZMflRBEhJCA4SfvCkQFDWx8JfJApP07asu/k7noB28Ztup4o IoQE+b/JNrq6ZPqACx5Hv42YQ6tGX1y86VysiBAS8CbHusVu52ZWLJ9QomdhoZYecPeOR0geISTE 373SzsJ3ah23uncU/5cRZX24tmnqluepDCHyBksWZafEF6TkCBkBNzkuVtyDjqucWcAwuWlxcXEF hBC6ptzLj1KxtYyePXqtZ5Y4g8KyrvKCFyW/4hSo1m+7qfpKVO2w8VGHwgtFGW+/BVSKW0Gx1zxG TQIAAAAAAPgFaaCf8yyZN+d1WO0vc0VK075pferTAa/vw9zwP4aE5g6r39CU9ggvYdiXssv32zvz 6KtvmRFGmB7JJ4TStLGtyby/5itpYpL35tXr3H61KiuIkhX/SPtT8kP4NShQEnT+Bw+/1JEtbGqx HoTITVFRmraN61Dvd3tLNmVSvZ69Y5Y4OepQ4amMeM+v/BK+vy1ITkhl1DXVaUL4X5/feTNs7uYj 6ufOnLvhHppSumGWyiLfd9e0w68EhGKr6Vk69Rmz9MxB0+kzT74tX65Q7uVHCCGiyIdXfLIkFSGs +oLLiFlexaUpUK2/rCz5/vvnHg+QymvS5t1XLGvzvVwl1IW0sl3zAAAAAAAA1UTVzxT2U55FkBZZ XA8vSlNbi2Y7zP4nYPaPZTTzVU217HNil0yYHv46JOjnx15aXUOdYtIzMn8kn4RZmbxKS0WVSJCS mEacjQ055H2hkYFZRkZGLFFSUpo4OFF2tlS3NBE3k8eoq6uVdP4oDW1NmknP5P4oIcPLyBRSZpqa FBHnC0TcrGzpXBRDKHEGShB+ZsboLwNHjx+y4vzE7Dd3Tmzde/V1RmW2xBBmRL17+1pcZUF+Hp/o y6fHTutyc/qNch20xMtPmJH2U7GqvuBFY5ZbcekKVOsvK4sw7Utg4CvpTmEZTrnfD1iqW0HZrnkA AAAAAIBqoupnCiuaZ1GSuSLD4/JEguBj09c//dHmgjCC9NiqnhSJyeZlM5SmliZNcr49QtMqqsq/ 7slS+CX4bc4QpxaOyi98f5rgnTZs5mzNfHn0OoshbEIIraml/iNMWldPm8rmZZf0OM/wMrkiSltH +0d5KQ1dbRaTlSlVE8W3SMqP9Tq70ev8vjrthy1cMO+AXm6/P+8kVVXSjB8ZHiXgWJro0ySlcISU moaaomOMy738vo1aU3j/RQruOvdO+UpTOvIrTsFq/U3KIk2RupAo2zUPAAAAAABQTfwOM4XJxmS9 CfjCWNYxTA0P/xL2/Sf8a2q+AhtXbCTcj6ExlE3zxjrfHy85dRrZacpOA4kEQoqjJDuzVXEBeVx7 mGjYbcao+qpSi2mDtjNGNSrw/fd21LfHfJZF42ZG36tY2a51c53cj6ERghLiZLiv/T4wDVq7GH7f lK7h6mZHfQl+U4oBVkRZXx4f2Xjxk0r9BjWr8CpTsbGtyxEkJaaKmLxsnpDW1tH5fnSWhZ2tjqLJ u7JfflIFL19RSk1+xZWlWn9dWaSVqi7kXPMAAAAAAADwG88UJor65+Ct3tsXH1lnfubR24Q8trZJ XUeT2AuHH8dWXtMSlkHDVq58yUMjP/6Nb1i68PP1iwFDFs3aMoM65h4tMnDsO66rbh6TKCvouPCI PMN2o0f48ANyhWnv3sZWStYq2/fQqvP2uycfPF//2r8vQuOy2XrWTbr17+4oeLx80+1EyeAvgjoj NswrOPHkc65e06EzBhtFnVvlyZUdp1QmQBRz7eC//XZP3bmEOnTvI1e9XteJU1tm3Z//b0SJDbFY lj3mDjYID3gfFpvO6DsM6mGd+/5SyZuVB0uvTuPGmXxCWCp6lk36jelvknBvy9M0hlAhfm/4CwZM 7vJqt3sCbdR48OL+1gyJV3C3pbz8ZBa8gktacsxyK07hav0tyiKtNHVR/DUPAAAAAAAAv3MaiDCZ XtsmzIqZOq7X7PXj9JQEGTEfvG8eyanU/h3KjSdubyx5JUq9PrX7Rm++KObqsmnsOfOH/7lvlBIv wufSzvnBI48WnSqMECbz8b41jivnjtt8fHzKw3Vjl8XmV0q8TKbvrknD342cOKjD2IVDdJVFvKTw oCc7xp24HpL248mY/+bk+ieWE+dvbWjM4UX6n1q042BwbjFxZkvvneu3e9KsxBmTBq/Za6rOT/7k c2nuklPuaSUXRcRLzTUdMqnbeCNNVkFGzLuXB2bteZBauVXWbPqBZoQQRiTIy4h973N8zoGz7hkM IUz89Y1LTRbMmHvi8RqS+fXNo79X7szbMUTR/Zbu8pNZ8AospWLkV5yi1fp7lEVaKeqi+GseAAAA AAAA5M6qXaJho8YFBwdXXDBQgZTc1j/YZnSo1+RL8b9uMGuAKoRrHgAAAAAA/v81atTo/JkTZd78 9x0bCCoAJkiC6gbXPAAAAAAAQPGQBgIAAAAAAAAAqBaQBgIAAAAAAAAAqBZ+5yGioTwKni9v1/RX BwFQhXDNAwAAAAAAlACtgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAA AAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAA AAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWkgQAAAAAAAAAAqgWk gQDg12jWtMmvDqEs/qNhgxiqDwAAAACqOaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBaSBAAAAAAAA AACqBaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBaSBAAAA AAAAAACqBaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBaSBAAAAAAAAAACqBXYl75+2GHn0+hybyFOT h+99mydZTOkN2H9zRvz8Tut8+JVxxLn2HKlFotTrU7vvouafXW92dtSsf2NESm7rH2wzPtRr0qV4 UUUck1Kr3XHEhEEdmtuY6SmLuInhwS9uHj9xPSStQvZebr8+PKlKYRihIDcjLizY4965v2+8SpLU v5rLEkkFVVVcVYFl0KjPmJE93RytjLWVBNykqPf+d04cPBPAa1uxF2EZ0Co1LK1rmehpKrOJKD+X l5UWG/klIfu3Of2UTt0WjQ2SArzDMhmppVrWLZoYpQX5fMxg5G0tE61r4+KgFfvKPyK79BuXCqWs Y2pZ09hAW12ZQzOC/BxuWkJERFRGwf/REUuIR7WmU8u62rT4Uy/Mz+VmJEZFRqXm/jYXWDGUzNqO mTyuu7ONiSaVlxr7+a3n1aO774VX9K8qGQeu4F9MAAAAAACyVHYaiBBCCMWpM2zB6AcTD3+qqgeS /MCjS8+GCL6/5Md/EAgskuNi6Iz8Cj8Wpd1i7v5dw8wTXl47s+1dDI+lZ9WkW/95J9yarpqy4naM sMIP+F8NLz/g4PyTQQKKo6ZnbtO8e9+5R3t03D9r3vG3OQwhhAh4FV1BtOmQY3sMdg3Z+1qgwNqV Qrnu0C2H5jVnfXx45diVT4n5Kka1G7ey02QqOwehCHaN+k6ORsKkqLBonpBWVtHQ0lVhM79BYP8H aA0Le6e6ujQvKSYylpsnYqmo6+hrsUnJFyKlYt64kfIX358yX5V6xMolygh/HZXBEJayur6phbWj jurrV6EpZcyolPXklOoYWm0WH9jZOffJmQPnvmSrGphZ2zY11hQgLQMAAAAA/zeqIg0k/PTCU6XV 2EUDH006F141aQdhcqinh/vPSaf0YzNGVcKh1J2nrh5qEXZ06qTDodnflj24esNn3akNS5b8ETDz 2q/9Xvc3Ck+Y8snfz0dcKc/uXbp0788D26etnxo8bPurHEJIwesKriDaqHVbW3ZoRe6ylJQajv1r dvP8+8vHr34S/+3Kf3Lr4rc3f2FghBDC0jU2VM6JDngbwf3+TP31F4f0/4LWrGVXR1eU+M4/NDnv +8mNj1ZoW+UaBlp0VlUesXIx+bz0tDQRISQtOTFT0LyxhYXBl5S4sn0hULaTUzoqTXt2Moy6MHbJ kQ/fU2inK/eIAAAAAABVq0rGBmI+nt51N9Nh3KK+ZizZa3BMW43bfPr6S093j9vHN41pZkATQmn1 2vn81eH+Rt9iVHFddT/41bX5jt9SV6x6k6763lvVUsHHaSW39c9eHRtsIqPEso6uIEqrTf/ORsl3 956WJFkIIUSU/Hzf6SBOs769atGEKLmtf/JoiWv9HgtP3HzyyvfF08vbZrmZSXVbKy4AJbf1Tx4s dKnffe7Bf+77+nh43Dq+YZi9NvX/EJ4ozW/vthuJZj2Ht9WiSKEKUnJb//juvEZ6doP/OnfXx/v+ alcludWkZO46fuPxK889PHyf3rh6YGJTdU2XeWcuz2+sWnPkWT+/14Eeu7urEUIIYZu4jPvr1DV3 Lw/fp1dPrxvjaiIpaJGDtqk99rSH147uej9KxLKdeTnwyZp26ooUUc1lSF/rnCc7tz2NLzn7KScw Ws9p+LpjV557egV6P3l0ef+avnW+v1eOS5chhCJMMa1/KCUdi/p2zVq4uLVr2861uVNdA1WaEKJu 1bytm52hVPKY0qnr3MHVRp8mhNAq+pZ2TVu2dWvj1qqxnaWussKxlANtYNvatZ6epnEdpxau7dq1 dXNpbGuhLXX1srXMbJq0bN2+fdu2Lexr6yuRn0pMfYu5Xdt2bVo0tbXUVyn/LZGlb2GqLkz6/OlH RkYKx8ypbXsHox93QkqrrkvblnW0KMLWr9vUuZ4OS7Vms/btOnZo62hczP2ydEeUX0zawLZ16/r6 msb1mri0bt+uTRtn+zri2iZqlk3bujkYS91hKa06zh3aNDRQMK5CRLwsrohWUlamSPHXGCGE4uhY 2DZxbuPm1sGtdWvnRg1NNehiT05FX3UMIRQjEgqLaW9U7CeO1ncavmjr3//c8vD28Hl48eCc9ubf rkKZd7Oit6zvRxByanX/8/DVB36+pb/hAwAAAAAooErSQBxOrufBXU/5zafN6WFU9IiUVst5h7cP M393YuHU6QtPhtWZsG3v+Hochhfg95E0aOygSgghRMm2TXM2l2fg4mLNIoQQukajRjULgn3flLOj WTFHV3BrVp1GtmrZgT7BeYXeECX5+4YRaycH8d/wdI1Oy7b0F93fsXDyrLVnI2uN3LxzThM1BQKg Dbsu3zZUzfPgymnTl+7zV+4wd+MsZ1VFC/d7h5f3xss/S8W+UX1ZbdJofccxWzb9Qb04smblxsvv BcWHQem1XXR0x0ibxLs7li9avPXMA79PcbnZIacXr/g3lh93bW6fPt16DlzzLJcQStd14bEdwyw/ X1gze+bMdZe/WI3YfWRhW11K9kHfRd67Hcx27tKuxvcV2Dad25unv3jgky0j4sLYdZs5aeX6P/Mq uQeLvMAonQ5Lt09uGH1x+bQJY2et2XfvS1xqmqDkqimJKDM1TaBuXrd2DRmZD4Yoa6jyk6M+hQQE v43JU7do0MBUhSLZiYk8Wt9Q/0eGSsuwhkp+UkK6iLD16jZ2sFDlRr4NCnkTma1uZd/ISqNK7i+U snEDewt2anhocNC7sHTasK5tHX1xjoBSMW3oVL8GlfIlJCD4bUSWeu06xlInSEm/XhMHCzVe9Pvg kOD3MdnqNR0b162h6BksLhwNXR22MD05rdQ9nwSZUe9CY3NFeXGvvb09PX3fJyvWeLKkI5ZUTErJ yMbOjEn8/CYo5H1UjlpNO4c6uixCchMTMmg9IwNJZoXSNDJQLUhOTCtjjypKaAAAIABJREFUo04V VTWKyc8T56qKucYI4RjYOFhp5sS8Cw4ICHn/JYGXW5AvKubkVPxVl//a3TfbetCCGa3NVAq/J+8T xxDD2ubpL05vmT1h6uKL8XWGr1rV1+RHjujnu5msW9a3VVl1hy8dwH62d8nEyQt3+Si1L9UNHwAA AABAAVUyNhCbzRKlPth96I/zi2bPbue57Emq9Lu0Rb/JvQxf75my7WasiJDXH3jmTqcGDXL+e713 QECUcq+mNpxHAXy2jauLdui/13SHurSsefhThEjVsYkNebs/UOYDOcVWUlNT+1Y4hhHk5xaXLCr+ 6B6FUycyi6ZvqMukJCQVff4SJiUmCWlTA12aZBNCaJWwc0t2XE4UEUICgpO0LxwZMLT1kcAHmVQJ AdCq0RcXbzoXKyKEBLzJsW6x27mZFcsnVKEHsd88PEFyQirRrqHHIaRIhJSKrWX07NFrPbMYQghd c0xxYRRYDZjUVTdgx/jlV+NEhBDyTLyD1PhknpAR8JLj4mLFvTvoWn0nd9cL2DZu0/VEESEkyP9N ttHVJdMHXPA4Ku6t+PNBCaEe3/GeubRHB+NrF+NFhHBsO3YwTXmy8VVu4WhlnnwDkxokOSa+5OuI tpQTGNGzsFBLD7h7xyMkjxAS4u/+favyXbqkIOH9WxW7hlaOzqa81PiYmOiEjDxJtRUkvg9O/Pb/ rC8aBs0ttTWomLzcxMRMa2sjfU5iAl+cBTJQyU9MyhIRNQtrY+XMsKBP8bkMIZlcgapOU3Nz3agP qZXf65Cic6LffozOZQgh6VlCNT0HPV11KjWLoTTMLPTotE9vv8TnMYRkZmYUKLVobPZ9OzUTa2NO xudXH+PyGUJIRnqmQLll/drmManlGUCaUlZRJvlJ+WVIlQgK8vKFDGEE+bl5uYpHUMIRSy4mxeJF v/0Sk88QQtIzC5SaO5lZ1IhIT8xLTEitbWNsqBIXnccQQmsbGqjkJyWkl6ZoNMVisWmaraqhb1rb SpOf8Ob7yEDFXGNESVWVxc9ISEjNEBLCzUhPKf7kqJlV+FXHpNxdv9h8w+oJuy73/exx48qli7cD 48Ujlsn9xDGpD9bOfPBtJ+/31O1wbpxjPc5l8aaF7mbWk2TessQHUY26sHTrxTgRISQkNL+eyx7n ZlbE51d2bgUAAACA/zNVNGE8RRFR3K0tx9+qd5o1q5UWRX70zKA07ZvWpz699Po+SA3/Y0horlb9 hqa0MOLVq1Rdp8YWLMKq69rSMMz/5rOAlNotWxjRhFO/qb1SmH9AqsyHJdUOm58+9/H49vNwabE9 x+QcXcGiFf+w9lNTfuHXoMDk748m+R88/FJV69jUYpUcgPDrK7+E7xsKkhNSGXVN9VJ1/fmNw6Np mjAikcxHNlHkwys+39MxxYdBadk6WpP37p4JJT34UZq2jetQ7196SwrKpHo9e8dYOznqfD8Z0gcl hDDpL2+659h37WBBE0I4dh3cTBKf3gtWsAGaon055Acm/Pr8zhv1gZuPbBjfsWENJamtyn3p8jMi gny9gz7H5aia1m/k4mxrJrvq+HkFDM1iUYQw+ckJ6UTPSNweiNY2rKGcm5SYKSIcLV1NwktJ/d4p ScTN5ArZGlpV0o6Byc1Il/SGEuXnFxA2m0URQtgaWmpMVmpa/vc3hZkZWZIcBkdLV51wk1MLJPVd kJacRdS1tcvZHqgUdV9xij2iAsVkcjIyfpwjbkpaAUtdU50ihJ8anyLUNjJQJYQQWsvAQCU/OTGz NCkWloF9mzZubV1dmzeqbyBKeB/yMVlmmyWpaywnJSGTZWbvZFvLUFNZ7sVcOVedKD3g0LRBfaZu v/7VrPeiAzcubehvrVS6TxyTmpgiYquoSDrP/XQ3k3vLEkYF+CdK7qgpCWmMuqZCfVABAAAAABRU Ja2BvhFGXNp2utvxSfMn3Qk+Jvo+9gKlqa1Fsx1m/xMwW7ImRTNf1VQpwv/gF5jX16mRHpu4tjKL fO4Z+c7Il9fHtbnOlbdOTroJXv7FzHSV77d35tFX30b4ZARpkcX1z5B3dEUIUhLTiLOxIYe8LxQJ y8jIiCVKSvo2K7soO1uqCYmIm8lj1NXVqJIDEHGzfmqZwBBK8WfM3zw8JRMLA5LqnSRzNiNhRppk QnA5YVAampo0k5aRVeKzKaWhrUkz6ZncH2syvIxMIWWmqUkRcT5R+qCEEEJ4nrefZezq0rXW+cMx dp3bG8Y8ePhGwc4+gtSkNMrZ1EiJhMpvPVRCYILwMzNGfxk4evyQFecnZr+5c2Lr3quvM5jyXrrf CHPT4r6kxUWqmzRwrF+/ATfj1ddsQmgVPXNLUwNtdRUlNosiNIsmaeLA8pOSMurWNTRQSogTahsZ KGXHJnIZQrE5HEJr123Rvq5UuZgcNouSl4osCUMYwsguzk8XnYBf5BKiCCEUm80ipIDP/7Eyw+cL GHGWgGJz2BQpEAikdiXg8xmiymYTUva+pkxBfgGlp6JME1JF8/DJPaIixWQEQuGPimIEfAHDZtEU IYwgJSGZ72BkpB4dkatlZKiUl5hUqiwQEaWFBUemiRhhQW5OHl8kFUTx11j21+CAbPOatSxsmlsJ MxMiP3+JzZT1oaukq44QQkhujN+/u/yuHbXuuXLXksWrPgSO/TtK7idOycR58Mi+7Zxqm+ioK7Np ZQ0O8fqxu5/uZnJvWSJeOe6oAAAAAAAKqMo0ECEFH09tvdL18KDF416e+/6YxfC4PJEg+Nj09U+z pJ7WBOmxQkJyg/zfktkO9jU5La1i3ddFCfMTPPz5a1yaWHCcLHlBuz4VMx2yMD38dUjQT09ystsD yT26AoRfgt/mDHFq4aj8wvenqc5pw2bO1syXR6+zGMImhNCaWuo//pindfW0qWxeNiM/gG/fJZf9 gea3Do/SatG+uTrXO/BzcZNa/2iVU3wYjFp2NkNpaWvSJEf+8ynDy+SKKG0d7R9rUhq62iwmK1Nq p4WLkxdw515Cz86dap/+H3v3Hi9JdR8G/jbMDEgIPWAAMVfoZSTZ1msscdnY68d1tMRoCcmu88BC Dl6T2Fnv2k6czXrjxLvOw0k2G8dxYn8sJ5+E+MMnQiaftZWY2EY29l6/be4gIQu9EQiJOwwzA8wA wwDz6P2jpabUXVV9uupU1amu7/fDHz19zz3vLrp+95xT2396c+8X7vjQp0MfwX3m/ns//swN7/zm qy/4/3679CyhxRV7bucP/uM/+YPbfubKP33jD//vf+tnLzr57f/brxypOXW/0ukTj3xuZ9+lr3/p heesnTjnoje9822XPvfwZz770PGTz58+u+uVb7nqyi+nPHXk0cff8KbL9u459Owle3c//fDhE+O1 tbXTp0+Pzx773Ec/9RVrPcbPL7G1KadjTp86vbZ79+6vvKkf7d6ze+1UNrZT/Punz6yt7d61e7Q2 jTqfc+4505+eOr02yX56HvC5u3eN1k6drvWU9fGJ40+eftXL977i3CNHQ4ZitGvXOfXu80tLDGnm aNfuzKHPoz17do9Of+mQ5LNPHDr03Csvu+wlDz1+yd49Jw89+tRyIzo+deL48ZzI0a6yObZ29uRj X/j0Y1944CWXXvHGN77h63af+cOPHXpuruBxI7PuK0o48cCv/Owvfvs1//Ob37Rn7fPFn7jRhd/w I//uJ951+D/9xE/e8tGHnzhx6sJ3/+Nbf3AmrxcyXXDJilV7AADI1dKmsKmT9/6Hf/7LR173nh/6 S6/50jvjJz92z/3j11x56WMPPHD/57783wNfeOy5tbW18fGPHPjMi772T/35q950+A9/9/4za2sn D/z+vaOv+2+/Y+OrT927/SfPLShuodLSQ37/qd/74K8/eum7v/+mN2U3Ipxzybd8/037n//jX/qv D33pe/65V7xjY3o89nlv+aarX37y05948HTtCvS2ervXr/k7P/TfXfjAB2/7g2cWt6O4GuMnP/Gx L4y+5pu/4dK5uXz29JnR7j3T+N/4qT+5+1Pjr/mmF1Kes/cbN98yuv/ej5Ud4nzq43f82kNXfOu7 /uy3fsPe+z905/3BQZbxk7/3wd84fNE1f/N/vfqi0s9ZaMXOPnn/Xf/2n/zCZ85/09e8+pzoQ3PO nj27106dem5tbXThxRef99wj93/ukSeeeubZ554/Ndq1OxOnOPXYI0fPvvySvZdecvGeJx99dLLS 6dTxJ06svfgl5z134sTTL/z3zPP1DgY6+cSx53ZdtO/S8zLF77708r27nzv2RMj5TKeffvLk6MKL XjaNdp9zwctfuuvLmZ0+/vhTay+9+OJp7qPz9l7ysrWnj+cuPQl36ujO4efOu/TKK1+xJye8c/bM 6fGXYluTQl904YXZGPXZ8dronCWvy6UlBjRz9KKXv2L643NeevErdp+Zrkk5e/yRR5550SWXXn7J xec9/eihJaNARRbMsS+36+nDD3zq4afPufDCyXn1s53TzKz7Srsv3vvSteNPPH6m7BN37hu//hsu Ofxf//XP/PL2Zx565MjRJ855ycsLn6ZWcskCAIAWtLsaaG1tbfzk77/vZ379m3/83a9fe/yja2tr a2tnH/p/33fHn/8Xf+ff/qNX3fob9x16dtfLLn/D2y/f+cC/uWvn7NqZnQ9vH/y+v3j9K5668wOf PL22tjZ+8u7fv++CH7zu63d/4qfvDXle0wKlpYc48cc/92O3vfVf/fX33famD/7Sb3/i4IldF73+ ne/+C//920/f9aP/9L9OD3kYn77yO//x33r+lt/87MmLrnrP999w2UPv/7HffypGBXpTvXP3vnHj 6hNnzj3/pZe9/u3feP2f/cZXPbn1f/+dW+4LCVuUVOPM537x3299+4//wE//2Ev+w133P7V77xve 9qKPvO8/feS5swcfePDZS7/1u77zj07dc/LM4x+/b+fhD77vl779X33fv/yR0c/92qefuuCN137P 9339k3f+7V96sDS0c/Zzv/arn/6uG//6RS/95K13fX6ZVj/9R+/7+7/w1p/6jp+8/Y2/9ou//pEH nzh93ssuefWVr/jcf/zZX3s4W0JZxc59zXU/dMMlD9zzyc/tPDG++G1/+brXn/zk7Q+eWVsb1xqa 0YVXvO2rXnLi2FMnn33u1NlzX/Tyy69Y3/PU5w8eP7u29uyzz453v2zvy89/6tipcy+4+Iqv2nf+ 2toLYZfTjx86evotV7z+zO4nHpw+ofyZnQcO7XvrG9/55vMfOvzks2dGu89/ycvPf/aLDx6uszLj 7JNf/NzhS9/8NV/39gt3Hj1+8vQ5573s0lddsffM4Y9/MWhr0vjpg1984oo3Xfm2K0cPHj053vPS 9ddetvvM+EvDPT558IGD629/3dvetPbAoadP73rJZa97/UWnH/3YTo3zodfW1tbWTj/+wCe++NK3 v+pt/81LDj386PFnTo3P2bXnxS/Z8/QXPvfoybPHHj8+fuP66y974v6jz66d94or3rR+wXjty4d6 j0+eOHH2vEte8+rHzx47M37+ySdPBk240hIXN3O8dsGr33zl2YeOPH1m9yuuuPJV5z/zxU8+Nl0r dOLRQ0+/9orX79n91EOHF4dsAxXPsdGLX/mGK8478cRTT598fm3Py171yhefeeqLJ8a5nRN/1p37 xu/8iR94/UMf+fQXHznyxKkXv/od1733L1z8qX/3n+89tba2VviJe+TRg4+cuejt37j/lZ+699iL X/uNN/7N/2HfeO3hgjIKL1nVuxMAAMK1HgZaWxs/9ls/9bN/+A0/+vXTN47/wU/8tR98+Ptuvv5v /PjNF+05fezhT/3hL//bZybf48/cf/eHj3/3/zi66/c+/qVjLB6/+3c/dd6feuvn7r7naIw4SWnp YRn88U9973s//le+5y+/67t/+Dtecd7Zpw8/8JHf/Mmbb/nPH338hQqe+th/+PHffM33/O1//rWv 3P3057d//v/4yffdezJOBfpSvfPe+X0//c7x+OypZ44ffuiTd//HH/3h23/rs4uP9PlyMwqrcfbR D/3D7zn73T9w01/4kf/n0gvOHP/8h9//x2fX1tbGx+/6mX/w9v/rh27+Z//+rx799X/03X9v57mn 7v5X3/uDj37/997wD3563wWnjnzmj27/oR/5+d95fEFjzj78G//l3u/9P7/uvlt+8+ByU2587A// xfd8531/5a/95Xfd8IPXveL8teeffPSBj/3G3Cq2cUnFzj792Ml93/G97/6rl1147vPHHv747/7s D/7rDz02rj00z514+swll71q73l7zj1nfOa5p48d/sy9D+48dXZtbe3kwU99+sVveu1bvuE15559 7umjX7z/vs+fu/9lL/zqmScePXrm8vVzH3vwyAs7dU499pl7PvrM6197+ZVvfu2e0fjUyacee+TB MzWn8fi5Q5/48OnXvO41r3zNV79q9znjU888+djn/+TBh47O7xDK//2TOx//yOgNb3z1G/a/+pwz Jx774mc/duw179j35R+ffvz+D9/77Fe97lVfu//8XWeff+rxL/7JfV84Wv1YoKlTj3/mw9vHX/Pa V11yxZWX7z5nbXz62RPHDx8/O1pbGz978NMfP/+Nr7/ynd/0tWunnnny8Bc+cf+Zt10x/c3DD3zy ZV995Wvf8s7R849+8sDHw8JA5SUubOb4+EOfOvzi173hrReePzrzzBMP3ffZB469EBodnzx88Njr vuZlT37+8LPRLkvFc2x8+vkz57/qdV/92vN2jc6eOvnkYw989LOHny/onOizbvz45z777Oa33fAt l190we7TTz/6wEd/45/9L//mg59+fq3sE3f24Q/++D99zd/7a//sV77rRc8f+ezv/MK//uF//6Kf e2tRIUWXLAAAaEOtMyluvOnme++9N15lVtWezR//0E9c9nPX//XbH0nxu37i1UvA6KI/9y9/8e/u +qk/9wP/5bBzO+LZuOqd2wfu6boWS+tptQucc8mbv/Gt5z3wBx95uDjGs+fyt/+prx599g/ufWQF Fqys1vABADBE+/fvv+3WWyr/usMJ2pL4w14Sr16nzr3i2m+/+vTv/fLWETEgVlLpx3/04svWLzp7 9JGjKxADAgAAOtgUBv0wetHlV7527yu+6rof+Ktf8+Av/E9bZQdJw8o59/yXvPi8PRe88qtee+HT X/zMkXoHZwMAAGkQBoICo8u+7e/+3N9489lDf/Krf/8f/vwnIxwZAz1y3mVv+rorX7b27PFDn/zk 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 --nextPart9866453.eNJFYEL58v-- From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 22 02:51:02 2025 Received: (at 77914) by debbugs.gnu.org; 22 Apr 2025 06:51:02 +0000 Received: from localhost ([127.0.0.1]:44026 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u77TB-0002k4-OS for submit@debbugs.gnu.org; Tue, 22 Apr 2025 02:51:01 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:58081) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u77T8-0002ip-HF for 77914@debbugs.gnu.org; Tue, 22 Apr 2025 02:50:59 -0400 Received: by mail.gandi.net (Postfix) with ESMTPSA id BBA3843302; Tue, 22 Apr 2025 06:50:49 +0000 (UTC) From: Juri Linkov To: Vincenzo Pupillo Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color In-Reply-To: <7129720.9J7NaK4W3v@fedora> Organization: LINKOV.NET References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> <7129720.9J7NaK4W3v@fedora> Date: Tue, 22 Apr 2025 09:42:59 +0300 Message-ID: <87r01kbtms.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvgeeftdehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjohhffffkfgggtgesthdtredttdertdenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucggtffrrghtthgvrhhnpeegtdekudehueevfefftedufeelgfejffektefgieevjeeigeekueejteelieegheenucffohhmrghinhepghhithhhuhgsrdgtohhmnecukfhppeeluddruddvledruddthedruddujeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeluddruddvledruddthedruddujedphhgvlhhopehmrghilhdrghgrnhguihdrnhgvthdpmhgrihhlfhhrohhmpehjuhhriheslhhinhhkohhvrdhnvghtpdhnsggprhgtphhtthhopeegpdhrtghpthhtohepvghlihiisehgnhhurdhorhhgpdhrtghpthhtohepvgigvggtvhihsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeejledugeesuggvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopehvrdhpuhhpihhllhhosehgmhgrihhlrdgtohhm X-GND-Sasl: juri@linkov.net X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 77914 Cc: Eli Zaretskii , Eval Exec , 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > p.s. for Eli and Jury: I'm using libtreesitter-0.25.2 and tree-sitter-rust > v0.24.0 (Fedora 42) Maybe because they only bumped the ABI version from 14 to 15 without making more changes required for ABI 15: [dev-dependencies] - tree-sitter = "0.24" + tree-sitter = "0.25" Also see https://github.com/tree-sitter/tree-sitter-rust/issues/273 From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 22 14:40:52 2025 Received: (at 77914) by debbugs.gnu.org; 22 Apr 2025 18:40:52 +0000 Received: from localhost ([127.0.0.1]:49855 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u7IY7-0001oP-UH for submit@debbugs.gnu.org; Tue, 22 Apr 2025 14:40:52 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:42277) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1u7IY5-0001o1-Dj for 77914@debbugs.gnu.org; Tue, 22 Apr 2025 14:40:50 -0400 Received: by mail.gandi.net (Postfix) with ESMTPSA id 6AC0943957; Tue, 22 Apr 2025 18:40:40 +0000 (UTC) From: Juri Linkov To: Eval Exec Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color In-Reply-To: <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> Organization: LINKOV.NET References: <877c3gka72.fsf@gmail.com> <3523927.LZWGnKmheA@fedora> <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> Date: Tue, 22 Apr 2025 21:30:04 +0300 Message-ID: <874iyg82xf.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvgeeggeekucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufgjohhffffkfgggtgesthdtredttdertdenucfhrhhomheplfhurhhiucfnihhnkhhovhcuoehjuhhriheslhhinhhkohhvrdhnvghtqeenucggtffrrghtthgvrhhnpeegtdekudehueevfefftedufeelgfejffektefgieevjeeigeekueejteelieegheenucffohhmrghinhepghhithhhuhgsrdgtohhmnecukfhppeeluddruddvledruddthedruddujeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeluddruddvledruddthedruddujedphhgvlhhopehmrghilhdrghgrnhguihdrnhgvthdpmhgrihhlfhhrohhmpehjuhhriheslhhinhhkohhvrdhnvghtpdhnsggprhgtphhtthhopeefpdhrtghpthhtohepjeejledugeesuggvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopehvrdhpuhhpihhllhhosehgmhgrihhlrdgtohhmpdhrtghpthhtohepvgigvggtvhihsehgmhgrihhlrdgtohhm X-GND-Sasl: juri@linkov.net X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 77914 Cc: v.pupillo@gmail.com, 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > To reproduce this: use this rust file: > > Then eval: > 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost. > > 2. (progn (setq treesit-font-lock-level 3) (revert-buffer)) > colors are good. !Important, level 3 is good, but level 4 lost colors. > > 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > all color are lost again. The treesit-font-lock-level 4 contains the symbol 'error', therefore it adds highlighting of the ERROR nodes. At level 3 there are still errors, but whey are not highlighted. Removing the macro removes the errors. So if you are sure that the file is correct, you can report the issue to the authors of https://github.com/tree-sitter/tree-sitter-rust Then they can answer why everything in the first macro is the error: (ERROR (ERROR (identifier)) (identifier) { (ERROR ( $ () (attribute_item # [ (ERROR $ () (attribute (metavariable)) (ERROR : tt ) *) ]) (ERROR ) * (metavariable) : ident) (identifier) (ERROR $ ( { $ ( (metavariable) : (try_expression (identifier) (ERROR ) * } )) ?) (metavariable) : (identifier) (ERROR $) ( (ERROR , $) ( (metavariable)) : (ERROR (try_expression (identifier) (ERROR ) * )) ?) ) => { $) From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 22 15:24:53 2025 Received: (at 77914) by debbugs.gnu.org; 22 Apr 2025 19:24:53 +0000 Received: from localhost ([127.0.0.1]:49945 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1u7JEj-0003t1-4C for submit@debbugs.gnu.org; Tue, 22 Apr 2025 15:24:53 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]:43293) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1u7JEg-0003sh-Ir for 77914@debbugs.gnu.org; Tue, 22 Apr 2025 15:24:51 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3912fdddf8fso137177f8f.1 for <77914@debbugs.gnu.org>; Tue, 22 Apr 2025 12:24:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745349884; x=1745954684; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U7DNgssSBfEFH5elw16tPHC7IblOhHSOc2Av9KN79is=; b=P79gbRcpqQKdKitQZEQqB1b3tbAXy5ECZh0op4lp++BVfVrANiHObWhf6NucfEzza5 nL8bJgWd9/ggnOboX+O7oJotkfoj2tEc6H9msqeSpBpI4eiTNB5l9BmsqNoFTPFcYWxh KVgUKLQaX258ak+P6PsfjmIWY23kv5+jjJOpk0q8r/bp/UsseA0IfB0459fQtDoUUNpc chRFPb9/xgRWgeRlKiiUdMo/m4c6JCNvGVELYtVkE7b3JH0aEOi64Km511VyAmrekZLW MaU2batGrzleQoFAPOpaGI2sgIf1B1vTyz8AwTYx+AnWP1NyuX87N8nTOcTqRXiW+I+2 N1ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745349884; x=1745954684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U7DNgssSBfEFH5elw16tPHC7IblOhHSOc2Av9KN79is=; b=Q80FY8lfk6d3SSq9yTCpyhqofA9zUcdUMQua47RS4RclULNrsxKnH8quTygqJT8zcG Tu9ZRCVGzUQep+bUlwJ+xuDA2ugYB6aQSn0MYuZIXef3NckbTZ8ZotMcyUcaTJxmiXIR LXS/EtfwK9vQpHJS9TziWDWzbAoSpwfLYwJGraYF++O5psVaQtyx1IzSrPxFAuJvf6F6 LQ4VLTk1+xZbDMQ9JufEd1HJcTilHt2u4kuOuYrwlGP6t3ejxZwLb0uWZPtOLR50aPuv M3KOBupBobXIMN8vDGqIMe4fUdqjEmztjwZVPGrgwpF0D+2eiRmZ+Z698aIC5Uw/VUy1 WlCA== X-Gm-Message-State: AOJu0Yyp5JIlPWCp3dyeQRPphd8rYqfwxWKFDe3qaPmwdupKxa0d5DbW +uVDTHW1giEF2L1XBDgh4ag2R7YooIFo4UCbVAmo7lPVz+feJQaS X-Gm-Gg: ASbGnctbARDhV1FMa3FPLZilKS5v8nTxtCvzixD5zMNoJGUjj/eG0PwXTZW3J5vLrnH vBq9jOROwyqUX4utSpxki+0OX+OTY1qCOaWcfS6c2mGRCjuBrvGNee+9qQTcwscN/zF4dmSnihH pNCJ3uFzoPh//uoQTQuzwHi55nDdrsy+CoqPD1aD+Z/CbHRIEow6YEkIS3Jxry6sFai6K1rPeA0 wLZ8icQCevzbtcKIxXTiofD868AQOyRM98DKULgxlMRK68/NgOMtpzxNy+jES7ELyuCWpSDWRCO aRGk8dwJeqp5644aKMiCooF/P7fjXXzsAG3fqnxOzyGs+VmHpnFtq8Lg1d4zxf79kC3FYRs96mx v6nqu X-Google-Smtp-Source: AGHT+IFN41bCFJxxHh5jVQ2LNaHVTnnNupi8G51vcsMevKiYhw9JCy+dKgs6IdGcPHZZ2/N9IXc+QQ== X-Received: by 2002:a5d:5849:0:b0:390:ec6e:43ea with SMTP id ffacd0b85a97d-3a067242cd9mr130625f8f.15.1745349883837; Tue, 22 Apr 2025 12:24:43 -0700 (PDT) Received: from fedora.localnet (2-230-139-124.ip202.fastwebnet.it. [2.230.139.124]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39efa42082csm16045735f8f.3.2025.04.22.12.24.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 12:24:43 -0700 (PDT) From: Vincenzo Pupillo To: Eval Exec , Juri Linkov Subject: Re: bug#77914: 31.0.50; treesit-font-lock-level set to 4 cause rust-ts-mode lost all color Date: Tue, 22 Apr 2025 21:24:42 +0200 Message-ID: <2774972.vuYhMxLoTh@fedora> In-Reply-To: <874iyg82xf.fsf@mail.linkov.net> References: <877c3gka72.fsf@gmail.com> <5af658c9-70e0-4dd2-82ba-d528021771c1@gmail.com> <874iyg82xf.fsf@mail.linkov.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77914 Cc: 77914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Yes, I add here the result returned by tree-sitter command line with rust=20 grammar v0.23.2: (ERROR [0, 0] - [1105, 0] (line_comment [0, 0] - [1, 0] inner: (inner_doc_comment_marker [0, 2] - [0, 3]) doc: (doc_comment [0, 3] - [1, 0])) (line_comment [1, 0] - [2, 0] inner: (inner_doc_comment_marker [1, 2] - [1, 3]) doc: (doc_comment [1, 3] - [2, 0])) (line_comment [2, 0] - [3, 0] inner: (inner_doc_comment_marker [2, 2] - [2, 3]) doc: (doc_comment [2, 3] - [3, 0]) (line_comment [3, 0] - [4, 0] =2E.... This tool also marks the entire buffer as incorrect. Vincenzo In data marted=C3=AC 22 aprile 2025 20:30:04 Ora legale dell=E2=80=99Europa= centrale, Juri=20 Linkov ha scritto: > > To reproduce this: use this rust file: > >=20 > > Then eval: > > 1. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > > all color are lost. > >=20 > > 2. (progn (setq treesit-font-lock-level 3) (revert-buffer)) > > colors are good. !Important, level 3 is good, but level 4 lost colors. > >=20 > > 3. (progn (setq treesit-font-lock-level 4) (revert-buffer)) > > all color are lost again. >=20 > The treesit-font-lock-level 4 contains the symbol 'error', > therefore it adds highlighting of the ERROR nodes. > At level 3 there are still errors, but whey are not highlighted. > Removing the macro removes the errors. >=20 > So if you are sure that the file is correct, > you can report the issue to the authors of > https://github.com/tree-sitter/tree-sitter-rust >=20 > Then they can answer why everything in the first macro > is the error: >=20 > (ERROR > (ERROR (identifier)) > (identifier) { > (ERROR ( $ () > (attribute_item # [ > (ERROR $ () > (attribute (metavariable)) > (ERROR : tt ) *) > ]) > (ERROR ) * (metavariable) : ident) > (identifier) > (ERROR $ ( { $ ( (metavariable) : > (try_expression (identifier) > (ERROR ) * } )) > ?) > (metavariable) : (identifier) > (ERROR $) > ( > (ERROR , $) > ( (metavariable)) >=20 > (ERROR > (try_expression (identifier) > (ERROR ) * )) > ?) > ) =3D> { $)