servoshell: Replace getopts with bpaf for argument parsing (#37194)

This includes some small refactoring and some small breaking changes as
listed below. Other than these I tried to keep the functionality exactly
the same but because in the old code the parsing and settings of
preferences was intermingled it was difficult to figure out.

Small Breaking:
- Size and resources-path were unused but appeared in the help.
- soft-fail and hard-fail: Soft-fail flag got removed because it is too
  difficult to keep both. The default is now soft-fail and hard-fail can
be enabled.
- The help strings are obviously formatted differently now.
- -V does not work anymore but -v and --version.

Ideally, we want to have the ServoShellPreferences and Preferences be
directly the Argument structure but that needs a bit more discussion
because it would break backwards compatibility with the commandline.

This increases the binary size by ~280kb.

Testing: The testcases are still working but they do not cover much.
I added a unit test for the -p flag because it is the most difficult to
parse in general.
Fixes: This will fix a small number of various parsing misshaps. It will
also show if we are removing an option via unused lint.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
This commit is contained in:
Narfinger 2025-09-05 10:17:38 +02:00 committed by GitHub
parent b29eab0ffe
commit ed66e0b0ca
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 542 additions and 494 deletions

View file

@ -61,7 +61,7 @@ pub extern "C" fn Java_org_servo_servoview_JNIServo_version<'local>(
env: JNIEnv<'local>,
_class: JClass<'local>,
) -> JString<'local> {
let v = crate::servo_version();
let v = crate::VERSION;
env.new_string(&v)
.unwrap_or_else(|_str| JObject::null().into())
}

View file

@ -58,6 +58,10 @@ pub fn init(
ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences) => {
(opts, preferences, servoshell_preferences)
},
ArgumentParsingResult::Exit => {
std::process::exit(0);
},
ArgumentParsingResult::ErrorParsing => std::process::exit(1),
};
crate::init_tracing(servoshell_preferences.tracing_filter.as_deref());

View file

@ -153,6 +153,8 @@ pub fn init(
ArgumentParsingResult::ChromeProcess(opts, preferences, servoshell_preferences) => {
(opts, preferences, servoshell_preferences)
},
ArgumentParsingResult::Exit => std::process::exit(0),
ArgumentParsingResult::ErrorParsing => std::process::exit(1),
};
if servoshell_preferences.log_to_file {