[workspace] members = ["crates/*"] [workspace.package] # To build revisions that use Corrosion (those before 2024-01), use CMake 3.19, Rustc 1.78 and Rustup 1.27. rust-version = "1.85" edition = "2024" repository = "https://github.com/fish-shell/fish-shell" # see doc_src/license.rst for details # don't forget to update COPYING and debian/copyright too license = "GPL-2.0-only AND LGPL-2.0-or-later AND MIT AND PSF-2.0" [workspace.dependencies] bitflags = "2.5.0" cc = "1.0.94" cfg-if = "1.0.3" errno = "0.3.0" fish-build-helper = { path = "crates/build-helper" } fish-build-man-pages = { path = "crates/build-man-pages" } fish-common = { path = "crates/common" } fish-fallback = { path = "crates/fallback" } fish-gettext = { path = "crates/gettext" } fish-gettext-extraction = { path = "crates/gettext-extraction" } fish-gettext-maps = { path = "crates/gettext-maps" } fish-gettext-mo-file-parser = { path = "crates/gettext-mo-file-parser" } fish-printf = { path = "crates/printf", features = ["widestring"] } fish-tempfile = { path = "crates/tempfile" } fish-wchar = { path = "crates/wchar" } fish-widecharwidth = { path = "crates/widecharwidth" } libc = "0.2.177" # lru pulls in hashbrown by default, which uses a faster (though less DoS resistant) hashing algo. # disabling default features uses the stdlib instead, but it doubles the time to rewrite the history # files as of 22 April 2024. lru = "0.16.2" nix = { version = "0.30.1", default-features = false, features = [ "event", "inotify", "resource", "fs", "term", ] } num-traits = "0.2.19" once_cell = "1.19.0" pcre2 = { git = "https://github.com/fish-shell/rust-pcre2", tag = "0.2.9-utf32", default-features = false, features = [ "utf32", ] } phf = { version = "0.13", default-features = false } phf_codegen = "0.13" portable-atomic = { version = "1", default-features = false, features = [ "fallback", ] } proc-macro2 = "1.0" rand = { version = "0.9.2", default-features = false, features = [ "small_rng", "thread_rng", ] } rsconf = "0.3.0" rust-embed = { version = "8.9.0", features = [ "deterministic-timestamps", "include-exclude", "interpolate-folder-path", ] } serial_test = { version = "3", default-features = false } # We need 0.9.0 specifically for some crash fixes. terminfo = "0.9.0" widestring = "1.2.0" unicode-segmentation = "1.12.0" unicode-width = "0.2.0" unix_path = "1.0.1" xterm-color = "1.0.1" [profile.release] overflow-checks = true lto = true [profile.release-with-debug] inherits = "release" debug = true [package] name = "fish" version = "4.3.3-snapshot" edition.workspace = true rust-version.workspace = true default-run = "fish" license.workspace = true homepage = "https://fishshell.com" readme = "README.rst" [dependencies] bitflags.workspace = true cfg-if.workspace = true errno.workspace = true fish-build-helper.workspace = true fish-build-man-pages = { workspace = true, optional = true } fish-common.workspace = true fish-fallback.workspace = true fish-gettext = { workspace = true, optional = true } fish-gettext-extraction = { workspace = true, optional = true } fish-printf.workspace = true fish-tempfile.workspace = true fish-wchar.workspace = true fish-widecharwidth.workspace = true libc.workspace = true lru.workspace = true macro_rules_attribute = "0.2.2" nix.workspace = true num-traits.workspace = true once_cell.workspace = true pcre2.workspace = true rand.workspace = true terminfo.workspace = true xterm-color.workspace = true widestring.workspace = true [target.'cfg(not(target_has_atomic = "64"))'.dependencies] portable-atomic.workspace = true [target.'cfg(windows)'.dependencies] rust-embed = { workspace = true, features = [ "deterministic-timestamps", "debug-embed", "include-exclude", "interpolate-folder-path", ] } [target.'cfg(not(windows))'.dependencies] rust-embed = { workspace = true, features = [ "deterministic-timestamps", "include-exclude", "interpolate-folder-path", ] } [dev-dependencies] serial_test.workspace = true [build-dependencies] cc.workspace = true fish-build-helper.workspace = true fish-gettext-mo-file-parser.workspace = true phf_codegen = { workspace = true, optional = true } rsconf.workspace = true [target.'cfg(windows)'.build-dependencies] unix_path.workspace = true [lib] crate-type = ["rlib"] path = "src/lib.rs" [[bin]] name = "fish" path = "src/bin/fish.rs" [[bin]] name = "fish_indent" path = "src/bin/fish_indent.rs" [[bin]] name = "fish_key_reader" path = "src/bin/fish_key_reader.rs" [features] default = ["embed-manpages", "localize-messages"] benchmark = [] embed-manpages = ["dep:fish-build-man-pages"] # Enable gettext localization at runtime. Requires the `msgfmt` tool to generate catalog data at # build time. localize-messages = ["dep:fish-gettext"] # This feature is used to enable extracting messages from the source code for localization. # It only needs to be enabled if updating these messages (and the corresponding PO files) is # desired. This happens when running tests via `build_tools/check.sh` and when calling # `build_tools/update_translations.fish`, so there should not be a need to enable it manually. gettext-extract = ["dep:fish-gettext-extraction"] # The following features are auto-detected by the build-script and should not be enabled manually. asan = [] tsan = [] [workspace.lints] rust.non_camel_case_types = "allow" rust.non_upper_case_globals = "allow" rust.unknown_lints = "allow" rust.unstable_name_collisions = "allow" rustdoc.private_intra_doc_links = "allow" [workspace.lints.clippy] assigning_clones = "warn" implicit_clone = "warn" cloned_instead_of_copied = "warn" len_without_is_empty = "allow" # we're not a library crate let_and_return = "allow" manual_range_contains = "allow" map_unwrap_or = "warn" needless_lifetimes = "allow" new_without_default = "allow" option_map_unit_fn = "allow" # We do not want to use the e?print(ln)?! macros. # These lints flag their use. # In the future, they might change to flag other methods of printing. print_stdout = "deny" print_stderr = "deny" [lints] workspace = true