Commit Graph

21648 Commits

Author SHA1 Message Date
Johannes Altmanninger
7bc560190f Fix warning about unused test_notifiers on windows 2025-11-01 12:42:55 +01:00
Johannes Altmanninger
54b39be7e7 build_tools/style.fish: check that {rustfmt,Cargo}.toml edition specs are in sync
Commit 1fe6b28877 (rustfmt.toml: specify edition to allow 2024 syntax,
2025-10-19) mentions that "cargo fmt" has different behavior than
"rustfmt" before that commit.  Probably because when .rustfmt.toml
exists, rustfmt implicitly uses a different edition (2018?)  that
doesn't support c"" yet.  That commit bumped the edition to 2024,
which caused yet another deviation from "cargo fmt":

    Error writing files: failed to resolve mod `tests`: cannot parse /home/johannes/git/fish-shell/src/wutil/tests.rs
    error: expected identifier, found reserved keyword `gen`
      --> /home/johannes/git/fish-shell/src/tests/topic_monitor.rs:48:9
       |
    48 |     for gen in &mut gens_list {
       |         ^^^ expected identifier, found reserved keyword

This has since been fixed by
00784248db (Update to rust 2024 edition, 2025-10-22).

Let's add a test so that such changes won't randomly break "rustfmt"
again.

Fix that by using 2021 edition, like we do in Cargo.toml.

In future, rustfmt should probably default to a current edition (or
maybe read the edition from Cargo.toml?)  Not yet sure which one is the
upstream issue, maybe https://github.com/rust-lang/rustfmt/issues/5650
2025-11-01 12:42:55 +01:00
kerty
578f46c008 build_tools/style.fish: improve style and consistency 2025-11-01 12:42:55 +01:00
Johannes Altmanninger
b1cbbf7ce5 build_tools/style.fish: extract function 2025-11-01 12:42:55 +01:00
Johannes Altmanninger
af9b03625b build_tools/style.fish: reuse variable 2025-11-01 12:42:55 +01:00
Johannes Altmanninger
71f0e75651 Remove dead misc_init() 2025-11-01 12:42:55 +01:00
Johannes Altmanninger
3c4243fdd2 clang-format fish_test_helper 2025-11-01 12:42:55 +01:00
Peter Ammon
c66fa682e9 Fix some clipplies 2025-10-31 17:38:37 -07:00
David Adam
819759840e Debian packaging: use MSRV compiler if available
Allows the Ubuntu builds to work when using the cargo-VERSION packages.
2025-10-28 05:55:10 +08:00
David Adam
ccde87c4e3 Debian packaging: force name of build directory
make uses the GNUMakefile in the source directory otherwise
2025-10-28 05:51:01 +08:00
David Adam
3a9c5c7dc0 Debian packaging: pass buildsystem argument to all dh invocations 2025-10-28 05:48:55 +08:00
David Adam
d27537c4fc CMake: use configured Rust_CARGO for tests, not the cargo on $PATH 2025-10-27 06:07:41 +08:00
Peter Ammon
973f0f6134 Fix tmux-commandline.fish test harder
Make this pass on both macOS and Linux.

This was an obnoxious and uninteresting test to debug and so I used
claude code. It insists this is due to differences in pty handling between
macOS and Linux. Specifically it writes:

    The test was failing inconsistently because macOS and Linux have different
    PTY scrollback behavior after rendering prompts with right-prompts.

    Root cause: After fish writes a right-prompt to the rightmost column,
    different PTY drivers position the cursor differently:
    - macOS PTY: Cursor wraps to next line, creating a blank line
    - Linux PTY: Cursor stays on same line, no blank line

    This is OS kernel-level PTY driver behavior, not terminal emulator behavior.

    Fix: Instead of hardcoding platform-specific offsets, detect the actual
    terminal behavior by probing the output:
    1. Capture with -S -12 and check if the first line is blank
    2. If blank (macOS behavior), use -S -13 to go back one more line
    3. If not blank (Linux behavior), use -S -12

    Also split the C-l (clear-screen) command into its own send-keys call
    with tmux-sleep after it, ensuring the screen clears before new output
    appears. This improves test stability on both platforms.

    The solution is platform-independent and adapts to actual terminal
    behavior rather than making assumptions based on OS.
2025-10-26 13:34:35 -07:00
ridiculousfish
1973f3110e Make tmux-multiline-prompt.fish pass reliably on macOS 2025-10-26 12:06:35 -07:00
Peter Ammon
95e7977e70 Rename some constants to UPPER_CASE 2025-10-26 11:28:04 -07:00
Peter Ammon
15d06f964d Make tmux-commandline.fish pass reliably on macOS 2025-10-25 19:36:34 -07:00
Peter Ammon
5f96a4e665 Make test_fish_update_completions.fish pass on macOS 2025-10-25 11:56:43 -07:00
Henrik Hørlück Berg
075e4040be Remove resolver="2" to opt into resolver="3" default
This makes dependecy-resolving rust-version aware.

See: https://doc.rust-lang.org/edition-guide/rust-2024/cargo-resolver.html#cargo-rust-version-aware-resolver

This changes to lockfile to V4, which was released with rust 1.78
https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-178-2024-05-02,
and became the default with rust 1.83 https://doc.rust-lang.org/nightly/cargo/CHANGELOG.html#cargo-183-2024-11-28

Closes #11990
2025-10-24 13:48:19 +02:00
Henrik Hørlück Berg
7d41158b1d Bravely revert if let => match edition changes
See: https://doc.rust-lang.org/edition-guide/rust-2024/temporary-if-let-scope.html

I dot believe drop order matters in any of these cases.

Part of #11990
2025-10-24 13:48:19 +02:00
Henrik Hørlück Berg
00784248db Update to rust 2024 edition
This bravely avoids changing expr to expr_2021 in macros, which seems
extremely unlikely to be silently breaking anything.

See: https://doc.rust-lang.org/edition-guide/rust-2024/macro-fragment-specifiers.html

I do not believe we have any macros where this is relevant

Part of #11990
2025-10-24 13:48:19 +02:00
Henrik Hørlück Berg
b47b61ea08 Ignore noisy rule
This lint will be triggered by a forthcoming change, see
https://github.com/fish-shell/fish-shell/pull/11990#discussion_r2455299865

It bans the usage of

```rust
fn hello() -> impl Debug {
    let useful_name = xxx;
    useful_name
}
```

in favour of

```rust
fn hello() -> impl Debug {
    xxx
}
```
Which is less humanly-understandable.

Part of #11990
2025-10-24 13:48:19 +02:00
Johannes Altmanninger
787c6a443d Remove redundant per-module lints; fix some
As mentioned in 6896898769 (Add [lints] table to suppress lints
across all our crates, 2024-01-12), we can use workspace lints in
Cargo.toml now that we have MSRV >=1.74 and since we probably don't
support building without cargo.

This implies moving some lints from src/lib.rs to "workspace.lints".
While at it, address some of them insrtead.
2025-10-24 13:48:19 +02:00
kerty
f075c58eb5 Try to make tmux-transient-prompt.fish more consistent 2025-10-23 11:48:24 +02:00
kerty
07f0b1816e Wait until any output when initalasing tmux tests
Previously, if test setup didn't output word 'prompt' it would wait 5 second
timeout. This affected tmux-wrapping.fish and tmux-read.fish tests.

Change it so initialization function wait until any output and error out
on timeout.
2025-10-23 11:48:24 +02:00
kerty
73696da21c Allow for attaching to test tmux session without resizing 2025-10-23 11:48:24 +02:00
kerty
e22d90cbad Instead of variable pass args to tmux fish directly 2025-10-23 11:48:24 +02:00
kerty
c7fdb8dc6b Simplify behavior of ScreenData.cursor
Let `y=0` be the first line of the rendered commandline. Then, in final
rendering, the final value of the desired cursor was measured from
`y=scroll_amount`. This wasn't a problem because
```
if !MIDNIGHT_COMMANDER_HACK.load() {
    self.r#move(0, 0);
}
```
implicitly changed the actual cursor to be measured from `y=0` to `y=scroll_amount`.
This happened because the cursor moved to `y=scroll_amount` but had its
`y` value set to 0. Since the actual and desired cursors were both measured
from the same line, the code was correct, just unintuitive.

Change this to always measure cursor position from the start of the
rendered commandline.
2025-10-23 11:48:24 +02:00
kerty
f7359751c9 Small refactoring of Screen::write 2025-10-23 11:48:24 +02:00
kerty
0b7ab5a1b5 Fix not preserving empty last line in multiline prompts
Reproduction:
fish -C '
    function fish_prompt
        echo left-prompt\n
    end
    function fish_right_prompt
        echo right-prompt
    end
'
and pressing Enter would not preserve the line with right prompt.

This occurred because Screen::cursor_is_wrapped_to_own_line assumed
the last prompt line always had index 0. However, commit 606802daa (Make
ScreenData track multiline prompt, 2025-10-15) changed this so the last
prompt line's index is now `Screen.actual.visible_prompt_lines - 1`.

Screen::cursor_is_wrapped_to_own_line also didn't account for situations
where commandline indentation was 0.

Fix Screen::cursor_is_wrapped_to_own_line and add tests for prompts with
empty last lines.
2025-10-23 11:48:24 +02:00
kerty
e7ad7e5cf6 Fix missing right prompt when left prompt ends with empty line
Reproduction:
fish -C '
    function fish_prompt
        echo left-prompt\n
    end
    function fish_right_prompt
        echo right-prompt
    end
'

This was caused by an off-by-one error in initial Screen.desired resizing
from commit 606802daa (Make ScreenData track multiline prompt, 2025-10-15).
2025-10-23 11:48:24 +02:00
Étienne Deparis
9ccd6fb2d2 Add me as french maintainer
Part of #11842
2025-10-22 10:57:36 +02:00
Étienne Deparis
e7e97833a3 Improve some french translations
Closes #11842
2025-10-22 10:57:36 +02:00
Étienne Deparis
2dd6a7ba22 Sort recommended translations in french po file
Part of #11842
2025-10-22 10:57:36 +02:00
Johannes Altmanninger
034cd7ea35 Always handle mktemp failure in user-facing code
mktemp might be missing, see #11972
2025-10-22 10:57:36 +02:00
Johannes Altmanninger
037a399746 Add test for brace in command position with trailling text
See #11962
2025-10-22 10:57:36 +02:00
Johannes Altmanninger
6a86974b96 Fix build on Illumos
Fixes #11982
2025-10-22 10:57:36 +02:00
Johannes Altmanninger
3c468054bd completions/iwctl: fix spurious error output
Regressed in 4.1 in c94eddaf4b (Replaced all uses of argparse -i
with argparse -u, 2025-08-30).

Closes #11983
2025-10-22 10:57:36 +02:00
David Adam
6fd1304e52 Debian packaging: broaden packages for rustc to support Ubuntu 2025-10-21 11:33:54 +08:00
Nahor
a51b2f4023 Enable CI testing for MSYS 2025-10-21 04:25:30 +02:00
Nahor
abf3f50bb9 Relax test test_dup2_during_select_ebadf (#11976)
On MSYS/Cygwin, when select/poll wait on a descriptor and `dup2` is used
to copy into that descriptor, they return the descriptor as "ready",
unlike Linux (timeout) and MacOS (EBADF error).

The test specifically checked for Linux and MaxOS behaviors, failing on
Cygwin/MSYS. So relax it to also allow that behavior.
2025-10-21 04:25:30 +02:00
Nahor
20a6ac947b Disable invalid Windows filename character tests
Colons and backslashes are valid on Posix but not on Windows. So
remove those checks on Cygwin/MSYS
2025-10-21 04:25:30 +02:00
Nahor
b158ba1523 Disable permission tests on MSYS/Cygwin
POSIX permissions on Windows is problematic. MSYS and Cygwin have
a "acl/noacl" when mounting filesystems to specify how hard to try.

MSYS by default uses "noacl", which prevents some permissions to be set.
So disable the failing checks.

Note: Cygwin by default does use "acl", which may allow the check to
pass (unverified). But to be consereative, and because MSYS is the only
one providing a Fish-4.x package, we'll skip.
2025-10-21 04:25:30 +02:00
Nahor
372a65aa15 Temporary workaround for #11933 on Cygwin
Without the sleep, `flock` sometimes returns an error 14 "bad addr".
This puts the application into a deadlock.
2025-10-21 04:25:30 +02:00
Nahor
804bda5ba6 Disable test_history_races on Cygwin
The test always fail on Cygwin (with rare exceptions) so disable it
for now.
A likely cause is issue #11933, so this change should be revisited
once that issue is fixed.
2025-10-21 04:25:30 +02:00
Nahor
2f07df717d Disable symlink tests on Cygwin
Symbolic links on Windows/Cygwin are complicated and dependent on
multiple factors (env variable, file system, ...). Limitations in the
implementation causes the tests failures and there is little that Fish
can do about it. So disable those tests on Cygwin.
2025-10-21 04:25:30 +02:00
David Adam
1d0de5ce71 debian packaging: find alternative up-to-date Rust
Also drop cmake-mozilla, which disappeared a long time ago.
2025-10-20 19:00:26 +08:00
Daniel Rainer
c8001b5023 encoding: use UTF-8 everywhere
Assume that UTF-8 is used everywhere. This allows for significant
simplification of encoding-related functionality. We no longer need
branching on single-byte vs. multi-byte locales, and we can get rid of
all the libc calls for encoding and decoding, replacing them with Rust's
built-in functionality, or removing them without replacement in cases
where their functionality is no longer needed.

Several tests are removed from `tests/checks/locale.fish`, since setting
the locale no longer impacts encoding behavior. We might want more
rigorous testing of UTF-8 handling instead.

Closes #11975
2025-10-20 03:42:38 +02:00
kerty
755d5ae222 Try to always maintain prompt marker at (0, 0)
First, print prompt marker on repaint even if prompt is not visible.
Second, if we issue a clear at (0, 0) we need to restore marker.

This is necessary for features like Kitty's prompt navigation (`ctrl-shift-{jk}`),
which requires the prompt marker at the top of the scrolled command line
to actually jump back to the original state.

Closes #11911
2025-10-19 14:09:27 +02:00
Aditya Bhargava
5cfcfc64d8 Add tests for final prompt having fewer lines than initial (transient)
Part of #11911
2025-10-19 14:09:27 +02:00
kerty
606802daaf Make ScreenData track multiline prompt
Instead of pretending that prompt is always 1 line, track multiline
prompt in ScreenData.visible_prompt_lines and ScreenData.line_datas as
empty lines.

This enables:
- Trimming part of the prompt that leaves the viewport.
- Removing of the old hack needed for locating first prompt line.
- Fixing #11875.

Part of #11911
2025-10-19 14:09:27 +02:00