Thanks to visit codestin.com
Credit goes to github.com

Skip to content

refactor: create fish-future-feature-flags crate#12494

Draft
danielrainer wants to merge 6 commits intofish-shell:masterfrom
danielrainer:future_feature_flags_crate
Draft

refactor: create fish-future-feature-flags crate#12494
danielrainer wants to merge 6 commits intofish-shell:masterfrom
danielrainer:future_feature_flags_crate

Conversation

@danielrainer
Copy link

Another step in splitting up the main library crate.

At the moment, this breaks tests outside of the new crate, since the
crate changes behavior depending on whether the test config is active,
but tests outside the crate get the version with test disabled.

I tried to extract this because some other code I want to extract depends on it. However, in the current state it does not work. I haven't looked much into the semantics of the code, but the core problem is that #[cfg(test)] does not work across crate boundaries. Maybe we can resolve this by removing the behavioral difference in this case. Otherwise it might be possible to hack around it via some feature setting via build.rs, but that does not seem very robust.

Putting it out there in case someone has an idea of how to deal with this problem.

Stacked on #12493, but only to reduce merge conflicts.

Daniel Rainer added 6 commits March 1, 2026 00:26
The `msguniq` call for deduplicating the msgids originating from Rust
previously did not get a header entry (empty msgid with msgstr
containing metadata). This works fine as long as all msgids are
ASCII-only. But when a non-ASCII character appears in a msgid, `msguniq`
errors out without a header specifying the encoding. To resolve this,
add the header to the input of this `msguniq` invocation and then remove
the header again using sed to prevent duplicating it for the outer
msguniq call at the end of the file.
This time, functions for decoding `wstr` into various types and the
`ToCString` trait are extracted.

Part of the wider goal of slimming down the main library to improve
incremental build performance and reduce dependency cycles.
Previously, we chose the ellipsis character/string based on the locale.
We now assume a UTF-8 locale, and accordingly always use the Unicode
HORIZONTAL ELLIPSIS U+2026 `…`. When this was changed, some of the logic
for handling different ellipsis values was left behind. It no longer
serves a purpose, so remove it.

The functions returning constants are replaced by constants. Since the
ellipsis as a `wstr` is only used in a single file, make it a local
const there and define it via the `ELLIPSIS_CHAR` const.

Put the `ELLIPSIS_CHAR` definition into `fish-widestring`, removing the
dependency of `fish-wcstringutil` on `fish-common`, helping future
extraction efforts.

One localized message contains an ellipsis, which was inserted via a
placeholder, preventing translators from localizing it. Since the
ellipsis is a constant, put it directly into the localized string.
This is done in preparation for extracting this file into its own crate.
Another step in splitting up the main library crate.

At the moment, this breaks tests outside of the new crate, since the
crate changes behavior depending on whether the `test` config is active,
but tests outside the crate get the version with `test` disabled.
@danielrainer danielrainer force-pushed the future_feature_flags_crate branch from 0f0bddf to c10d04a Compare March 1, 2026 00:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant