[](https://renovatebot.com) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [STABLE](https://togithub.com/rust-lang/rust) | minor | `1.79` -> `1.80` | --- ### Release Notes <details> <summary>rust-lang/rust (STABLE)</summary> ### [`v1.80`](https://togithub.com/rust-lang/rust/blob/HEAD/RELEASES.md#Version-1800-2024-07-25) [Compare Source](https://togithub.com/rust-lang/rust/compare/1.79.0...1.80.0) \========================== <a id="1.80-Language"></a> ## Language - [Document maximum allocation size](https://togithub.com/rust-lang/rust/pull/116675/) - [Allow zero-byte offsets and ZST read/writes on arbitrary pointers](https://togithub.com/rust-lang/rust/pull/117329/) - [Support C23's variadics without a named parameter](https://togithub.com/rust-lang/rust/pull/124048/) - [Stabilize `exclusive_range_pattern` feature](https://togithub.com/rust-lang/rust/pull/124459/) - [Guarantee layout and ABI of `Result` in some scenarios](https://togithub.com/rust-lang/rust/pull/124870) <a id="1.80-Compiler"></a> ## Compiler - [Update cc crate to v1.0.97 allowing additional spectre mitigations on MSVC targets](https://togithub.com/rust-lang/rust/pull/124892/) - [Allow field reordering on types marked `repr(packed(1))`](https://togithub.com/rust-lang/rust/pull/125360/) - [Add a lint against never type fallback affecting unsafe code](https://togithub.com/rust-lang/rust/pull/123939/) - [Disallow cast with trailing braced macro in let-else](https://togithub.com/rust-lang/rust/pull/125049/) - [Expand `for_loops_over_fallibles` lint to lint on fallibles behind references.](https://togithub.com/rust-lang/rust/pull/125156/) - [self-contained linker: retry linking without `-fuse-ld=lld` on CCs that don't support it](https://togithub.com/rust-lang/rust/pull/125417/) - [Do not parse CVarArgs (`...`) as a type in trait bounds](https://togithub.com/rust-lang/rust/pull/125863/) - Improvements to LLDB formatting [#​124458](https://togithub.com/rust-lang/rust/pull/124458) [#​124500](https://togithub.com/rust-lang/rust/pull/124500) - [For the wasm32-wasip2 target default to PIC and do not use `-fuse-ld=lld`](https://togithub.com/rust-lang/rust/pull/124858/) - [Add x86\_64-unknown-linux-none as a tier 3 target](https://togithub.com/rust-lang/rust/pull/125023/) - [Lint on `foo.into_iter()` resolving to `&Box<[T]>: IntoIterator`](https://togithub.com/rust-lang/rust/pull/124097/) <a id="1.80-Libraries"></a> ## Libraries - [Add `size_of` and `size_of_val` and `align_of` and `align_of_val` to the prelude](https://togithub.com/rust-lang/rust/pull/123168/) - [Abort a process when FD ownership is violated](https://togithub.com/rust-lang/rust/pull/124210/) - [io::Write::write_fmt: panic if the formatter fails when the stream does not fail](https://togithub.com/rust-lang/rust/pull/125012/) - [Panic if `PathBuf::set_extension` would add a path separator](https://togithub.com/rust-lang/rust/pull/125070/) - [Add assert_unsafe_precondition to unchecked\_{add,sub,neg,mul,shl,shr} methods](https://togithub.com/rust-lang/rust/pull/121571/) - [Update `c_char` on AIX to use the correct type](https://togithub.com/rust-lang/rust/pull/122986/) - [`offset_of!` no longer returns a temporary](https://togithub.com/rust-lang/rust/pull/124484/) - [Handle sigma in `str.to_lowercase` correctly](https://togithub.com/rust-lang/rust/pull/124773/) - [Raise `DEFAULT_MIN_STACK_SIZE` to at least 64KiB](https://togithub.com/rust-lang/rust/pull/126059/) <a id="1.80-Stabilized-APIs"></a> ## Stabilized APIs - [`impl Default for Rc<CStr>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3CCStr%3E) - [`impl Default for Rc<str>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3Cstr%3E) - [`impl Default for Rc<[T]>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3C%5BT%5D%3E) - [`impl Default for Arc<str>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3Cstr%3E) - [`impl Default for Arc<CStr>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3CCStr%3E) - [`impl Default for Arc<[T]>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3C%5BT%5D%3E) - [`impl IntoIterator for Box<[T]>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-IntoIterator-for-Box%3C%5BI%5D,+A%3E) - [`impl FromIterator<String> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3CString%3E-for-Box%3Cstr%3E) - [`impl FromIterator<char> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3Cchar%3E-for-Box%3Cstr%3E) - [`LazyCell`](https://doc.rust-lang.org/beta/core/cell/struct.LazyCell.html) - [`LazyLock`](https://doc.rust-lang.org/beta/std/sync/struct.LazyLock.html) - [`Duration::div_duration_f32`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f32) - [`Duration::div_duration_f64`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f64) - [`Option::take_if`](https://doc.rust-lang.org/beta/std/option/enum.Option.html#method.take_if) - [`Seek::seek_relative`](https://doc.rust-lang.org/beta/std/io/trait.Seek.html#method.seek_relative) - [`BinaryHeap::as_slice`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.as_slice) - [`NonNull::offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset) - [`NonNull::byte_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset) - [`NonNull::add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.add) - [`NonNull::byte_add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_add) - [`NonNull::sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.sub) - [`NonNull::byte_sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_sub) - [`NonNull::offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset_from) - [`NonNull::byte_offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset_from) - [`NonNull::read`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read) - [`NonNull::read_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_volatile) - [`NonNull::read_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_unaligned) - [`NonNull::write`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write) - [`NonNull::write_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_volatile) - [`NonNull::write_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_unaligned) - [`NonNull::write_bytes`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_bytes) - [`NonNull::copy_to`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to) - [`NonNull::copy_to_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to_nonoverlapping) - [`NonNull::copy_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from) - [`NonNull::copy_from_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from_nonoverlapping) - [`NonNull::replace`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.replace) - [`NonNull::swap`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.swap) - [`NonNull::drop_in_place`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.drop_in_place) - [`NonNull::align_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.align_offset) - [`<[T]>::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_checked) - [`<[T]>::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_mut_checked) - [`str::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_checked) - [`str::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_mut_checked) - [`str::trim_ascii`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii) - [`str::trim_ascii_start`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_start) - [`str::trim_ascii_end`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_end) - [`<[u8]>::trim_ascii`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii) - [`<[u8]>::trim_ascii_start`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_start) - [`<[u8]>::trim_ascii_end`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_end) - [`Ipv4Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#associatedconstant.BITS) - [`Ipv4Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.to_bits) - [`Ipv4Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.from_bits) - [`Ipv6Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#associatedconstant.BITS) - [`Ipv6Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.to_bits) - [`Ipv6Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.from_bits) - [`Vec::<[T; N]>::into_flattened`](https://doc.rust-lang.org/beta/alloc/vec/struct.Vec.html#method.into_flattened) - [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened) - [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened_mut) These APIs are now stable in const contexts: - [`<[T]>::last_chunk`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.last_chunk) - [`BinaryHeap::new`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.new) <a id="1.80-Cargo"></a> ## Cargo - [Stabilize `-Zcheck-cfg` as always enabled](https://togithub.com/rust-lang/cargo/pull/13571/) - [Warn, rather than fail publish, if a target is excluded](https://togithub.com/rust-lang/cargo/pull/13713/) - [Add special `check-cfg` lint config for the `unexpected_cfgs` lint](https://togithub.com/rust-lang/cargo/pull/13913/) - [Stabilize `cargo update --precise <yanked>`](https://togithub.com/rust-lang/cargo/pull/13974/) - [Don't change file permissions on `Cargo.toml` when using `cargo add`](https://togithub.com/rust-lang/cargo/pull/13898/) - [Support using `cargo fix` on IPv6-only networks](https://togithub.com/rust-lang/cargo/pull/13907/) <a id="1.80-Rustdoc"></a> ## Rustdoc - [Allow searching for references](https://togithub.com/rust-lang/rust/pull/124148/) - [Stabilize `custom_code_classes_in_docs` feature](https://togithub.com/rust-lang/rust/pull/124577/) - [fix: In cross-crate scenarios show enum variants on type aliases of enums](https://togithub.com/rust-lang/rust/pull/125300/) <a id="1.80-Compatibility-Notes"></a> ## Compatibility Notes - [rustfmt estimates line lengths differently when using non-ascii characters](https://togithub.com/rust-lang/rustfmt/issues/6203) - [Type aliases are now handled correctly in orphan check](https://togithub.com/rust-lang/rust/pull/117164/) - [Allow instructing rustdoc to read from stdin via `-`](https://togithub.com/rust-lang/rust/pull/124611/) - [`std::env::{set_var, remove_var}` can no longer be converted to safe function pointers and no longer implement the `Fn` family of traits](https://togithub.com/rust-lang/rust/pull/124636) - [Warn (or error) when `Self` constructor from outer item is referenced in inner nested item](https://togithub.com/rust-lang/rust/pull/124187/) - [Turn `indirect_structural_match` and `pointer_structural_match` lints into hard errors](https://togithub.com/rust-lang/rust/pull/124661/) - [Make `where_clause_object_safety` lint a regular object safety violation](https://togithub.com/rust-lang/rust/pull/125380/) - [Turn `proc_macro_back_compat` lint into a hard error.](https://togithub.com/rust-lang/rust/pull/125596/) - [Detect unused structs even when implementing private traits](https://togithub.com/rust-lang/rust/pull/122382/) - [`std::sync::ReentrantLockGuard<T>` is no longer `Sync` if `T: !Sync`](https://togithub.com/rust-lang/rust/pull/125527) which means [`std::io::StdoutLock` and `std::io::StderrLock` are no longer Sync](https://togithub.com/rust-lang/rust/issues/127340) <a id="1.80-Internal-Changes"></a> ## Internal Changes These changes do not affect any public interfaces of Rust, but they represent significant improvements to the performance or internals of rustc and related tools. - Misc improvements to size of generated html by rustdoc e.g. [#​124738](https://togithub.com/rust-lang/rust/pull/124738/) and [#​123734](https://togithub.com/rust-lang/rust/pull/123734/) - [MSVC targets no longer depend on libc](https://togithub.com/rust-lang/rust/pull/124050/) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "* * * * *" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/crate-ci/typos). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MzguMCIsInVwZGF0ZWRJblZlciI6IjM3LjQzOC4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
typos
Source code spell checker
Finds and corrects spelling mistakes among source code:
- Fast enough to run on monorepos
- Low false positives so you can run on PRs
Dual-licensed under MIT or Apache 2.0
Documentation
- Installation
- Getting Started
- Reference
- FAQ
- Comparison with other spell checkers
- Projects using typos
- Benchmarks
- Design
- Contribute
- CHANGELOG
Install
Download a pre-built binary (installable via gh-install).
Or use rust to install:
cargo install typos-cli
Or use Homebrew to install:
brew install typos-cli
Or use Conda to install:
conda install typos
Or use Pacman to install:
sudo pacman -S typos
Getting Started
Most commonly, you'll either want to see what typos are available with
typos
Or have them fixed
typos --write-changes
typos -w
If there is any ambiguity (multiple possible corrections), typos will just report it to the user and move on.
False-positives
Sometimes, what looks like a typo is intentional, like with people's names, acronyms, or localized content.
To mark a word or an identifier (grouping of words) as valid, add it your _typos.toml by declaring itself as the valid spelling:
[default]
extend-ignore-identifiers-re = [
# *sigh* this just isn't worth the cost of fixing
"AttributeID.*Supress.*",
]
[default.extend-identifiers]
# *sigh* this just isn't worth the cost of fixing
AttributeIDSupressMenu = "AttributeIDSupressMenu"
[default.extend-words]
# Don't correct the surname "Teh"
teh = "teh"
For cases like localized content, you can disable spell checking of file contents while still checking the file name:
[type.po]
extend-glob = ["*.po"]
check-file = false
(run typos --type-list to see configured file types)
If you need some more flexibility, you can completely exclude some files from consideration:
[files]
extend-exclude = ["localized/*.po"]
Integrations
- GitHub Actions
- pre-commit
- 🐊Putout Processor
- Visual Studio Code
- typos-lsp (Language Server Protocol server)
Custom
typos provides several building blocks for custom native integrations
-reads fromstdin,--write-changeswill be written tostdout--diffto provide a diff--format jsonto get jsonlines with exit code 0 on no errors, code 2 on typos, anything else is an error.
Examples:
# Read file from stdin, write corrected version to stdout
typos - --write-changes
# Creates a diff of what would change
typos dir/file --diff
# Fully programmatic control
typos dir/file --format json
Debugging
You can see what the effective config looks like by running
typos --dump-config -
You can then see how typos is processing your project with
typos --files
typos --identifiers
typos --words
If you need to dig in more, you can enable debug logging with -v
FAQ
Why was ... not corrected?
Does the file show up in typos --files?
If not, check your config with typos --dump-config -.
The [files] table controls how we walk files.
If you are using files.extend-exclude,
are you running into #593?
If you are using files.ignore-vcs = true,
is the file in your .gitignore but git tracks it anyways?
Prefer allowing the file explicitly (see #909).
Does the identifier show up in typos --identifiers or the word show up in typos --words?
If not, it might be subject to one of typos' heuristics for
detecting non-words (like hashes) or
unambiguous words (like words after a \ escape).
If it is showing up, likely typos doesn't know about it yet.
typos maintains a list of known typo corrections to keep the false positive
count low so it can safely run unassisted.
This is in contrast to most spell checking UIs people use where there is a known list of valid words. In this case, the spell checker tries to guess your intent by finding the closest-looking word. It then has a gauge for when a word isn't close enough and assumes you know best. The user has the opportunity to verify these corrections and explicitly allow or reject them.
For more on the trade offs of these approaches, see Design.
- To correct it locally, see also our False Positives documentation.
- To contribute your correction, see Contribute
