From 788c2c5a8dd3006cfda25ffe5c829ddebef4f26a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 22 Aug 2023 09:09:07 +0200 Subject: [PATCH] LibWeb: Stop using fallible JSON API in code generators --- .../LibWeb/GenerateAriaRoles.cpp | 81 +++++----- .../LibWeb/GenerateCSSEasingFunctions.cpp | 31 ++-- .../LibWeb/GenerateCSSEnums.cpp | 12 +- .../LibWeb/GenerateCSSMathFunctions.cpp | 64 ++++---- .../LibWeb/GenerateCSSMediaFeatureID.cpp | 52 +++---- .../LibWeb/GenerateCSSPropertyID.cpp | 143 ++++++++---------- .../LibWeb/GenerateCSSPseudoClass.cpp | 24 ++- .../LibWeb/GenerateCSSTransformFunctions.cpp | 31 ++-- .../LibWeb/GenerateCSSValueID.cpp | 19 +-- 9 files changed, 199 insertions(+), 258 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateAriaRoles.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateAriaRoles.cpp index 189e7eb37c2..c506cb52399 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateAriaRoles.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateAriaRoles.cpp @@ -51,7 +51,7 @@ ErrorOr generate_header_file(JsonObject& roles_data, Core::File& file) namespace Web::ARIA { )~~~"); - TRY(roles_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + roles_data.for_each_member([&](auto& name, auto& value) -> void { VERIFY(value.is_object()); JsonObject const& value_object = value.as_object(); @@ -67,14 +67,13 @@ class @name@ : JsonArray const& super_classes = value_object.get_array("superClassRoles"sv).value(); bool first = true; - TRY(super_classes.try_for_each([&](JsonValue const& value) -> ErrorOr { + super_classes.for_each([&](JsonValue const& value) { VERIFY(value.is_string()); class_definition_generator.append(first ? " "sv : ", "sv); - class_definition_generator.append(TRY(String::formatted("public {}", value.as_string()))); + class_definition_generator.append(MUST(String::formatted("public {}", value.as_string()))); first = false; - return {}; - })); + }); class_definition_generator.append(R"~~~( { @@ -106,8 +105,7 @@ public: virtual NameFromSource name_from_source() const override; )~~~"); class_definition_generator.appendln("};"); - return {}; - })); + }); generator.appendln("}"); @@ -115,25 +113,24 @@ public: return {}; } -ErrorOr generate_hash_table_population(JsonArray const& values, StringView hash_table_name, StringView enum_class) +String generate_hash_table_population(JsonArray const& values, StringView hash_table_name, StringView enum_class) { StringBuilder builder; - TRY(values.try_for_each([&](auto& value) -> ErrorOr { + values.for_each([&](auto& value) { VERIFY(value.is_string()); - TRY(builder.try_appendff(" {}.set({}::{});\n", hash_table_name, enum_class, value.as_string())); - return {}; - })); + builder.appendff(" {}.set({}::{});\n", hash_table_name, enum_class, value.as_string()); + }); - return builder.to_string(); + return MUST(builder.to_string()); } -ErrorOr generate_hash_table_member(SourceGenerator& generator, StringView member_name, StringView hash_table_name, StringView enum_class, JsonArray const& values) +void generate_hash_table_member(SourceGenerator& generator, StringView member_name, StringView hash_table_name, StringView enum_class, JsonArray const& values) { auto member_generator = generator.fork(); member_generator.set("member_name"sv, member_name); member_generator.set("hash_table_name"sv, hash_table_name); member_generator.set("enum_class"sv, enum_class); - member_generator.set("hash_table_size"sv, TRY(String::number(values.size()))); + member_generator.set("hash_table_size"sv, MUST(String::number(values.size()))); if (values.size() == 0) { member_generator.append(R"~~~( @@ -143,7 +140,7 @@ HashTable<@enum_class@> const& @name@::@member_name@() const return @hash_table_name@; } )~~~"); - return {}; + return; } member_generator.append(R"~~~( @@ -153,14 +150,12 @@ HashTable<@enum_class@> const& @name@::@member_name@() const if (@hash_table_name@.is_empty()) { @hash_table_name@.ensure_capacity(@hash_table_size@); )~~~"); - member_generator.append(TRY(generate_hash_table_population(values, hash_table_name, enum_class))); + member_generator.append(generate_hash_table_population(values, hash_table_name, enum_class)); member_generator.append(R"~~~( } return @hash_table_name@; } )~~~"); - - return {}; } StringView aria_name_to_enum_name(StringView name) @@ -266,15 +261,14 @@ StringView aria_name_to_enum_name(StringView name) } } -ErrorOr translate_aria_names_to_enum(JsonArray const& names) +JsonArray translate_aria_names_to_enum(JsonArray const& names) { JsonArray translated_names; - TRY(names.try_for_each([&](JsonValue const& value) -> ErrorOr { + names.for_each([&](JsonValue const& value) { VERIFY(value.is_string()); auto name = value.as_string(); - TRY(translated_names.append(aria_name_to_enum_name(name))); - return {}; - })); + MUST(translated_names.append(aria_name_to_enum_name(name))); + }); return translated_names; } @@ -289,7 +283,7 @@ ErrorOr generate_implementation_file(JsonObject& roles_data, Core::File& f namespace Web::ARIA { )~~~"); - TRY(roles_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + roles_data.for_each_member([&](auto& name, auto& value) -> void { VERIFY(value.is_object()); auto member_generator = generator.fork(); @@ -297,25 +291,25 @@ namespace Web::ARIA { JsonObject const& value_object = value.as_object(); - JsonArray const& supported_states = TRY(translate_aria_names_to_enum(value_object.get_array("supportedStates"sv).value())); - TRY(generate_hash_table_member(member_generator, "supported_states"sv, "states"sv, "StateAndProperties"sv, supported_states)); - JsonArray const& supported_properties = TRY(translate_aria_names_to_enum(value_object.get_array("supportedProperties"sv).value())); - TRY(generate_hash_table_member(member_generator, "supported_properties"sv, "properties"sv, "StateAndProperties"sv, supported_properties)); + JsonArray const& supported_states = translate_aria_names_to_enum(value_object.get_array("supportedStates"sv).value()); + generate_hash_table_member(member_generator, "supported_states"sv, "states"sv, "StateAndProperties"sv, supported_states); + JsonArray const& supported_properties = translate_aria_names_to_enum(value_object.get_array("supportedProperties"sv).value()); + generate_hash_table_member(member_generator, "supported_properties"sv, "properties"sv, "StateAndProperties"sv, supported_properties); - JsonArray const& required_states = TRY(translate_aria_names_to_enum(value_object.get_array("requiredStates"sv).value())); - TRY(generate_hash_table_member(member_generator, "required_states"sv, "states"sv, "StateAndProperties"sv, required_states)); - JsonArray const& required_properties = TRY(translate_aria_names_to_enum(value_object.get_array("requiredProperties"sv).value())); - TRY(generate_hash_table_member(member_generator, "required_properties"sv, "properties"sv, "StateAndProperties"sv, required_properties)); + JsonArray const& required_states = translate_aria_names_to_enum(value_object.get_array("requiredStates"sv).value()); + generate_hash_table_member(member_generator, "required_states"sv, "states"sv, "StateAndProperties"sv, required_states); + JsonArray const& required_properties = translate_aria_names_to_enum(value_object.get_array("requiredProperties"sv).value()); + generate_hash_table_member(member_generator, "required_properties"sv, "properties"sv, "StateAndProperties"sv, required_properties); - JsonArray const& prohibited_states = TRY(translate_aria_names_to_enum(value_object.get_array("prohibitedStates"sv).value())); - TRY(generate_hash_table_member(member_generator, "prohibited_states"sv, "states"sv, "StateAndProperties"sv, prohibited_states)); - JsonArray const& prohibited_properties = TRY(translate_aria_names_to_enum(value_object.get_array("prohibitedProperties"sv).value())); - TRY(generate_hash_table_member(member_generator, "prohibited_properties"sv, "properties"sv, "StateAndProperties"sv, prohibited_properties)); + JsonArray const& prohibited_states = translate_aria_names_to_enum(value_object.get_array("prohibitedStates"sv).value()); + generate_hash_table_member(member_generator, "prohibited_states"sv, "states"sv, "StateAndProperties"sv, prohibited_states); + JsonArray const& prohibited_properties = translate_aria_names_to_enum(value_object.get_array("prohibitedProperties"sv).value()); + generate_hash_table_member(member_generator, "prohibited_properties"sv, "properties"sv, "StateAndProperties"sv, prohibited_properties); JsonArray const& required_context_roles = value_object.get_array("requiredContextRoles"sv).value(); - TRY(generate_hash_table_member(member_generator, "required_context_roles"sv, "roles"sv, "Role"sv, required_context_roles)); + generate_hash_table_member(member_generator, "required_context_roles"sv, "roles"sv, "Role"sv, required_context_roles); JsonArray const& required_owned_elements = value_object.get_array("requiredOwnedElements"sv).value(); - TRY(generate_hash_table_member(member_generator, "required_owned_elements"sv, "roles"sv, "Role"sv, required_owned_elements)); + generate_hash_table_member(member_generator, "required_owned_elements"sv, "roles"sv, "Role"sv, required_owned_elements); bool accessible_name_required = value_object.get_bool("accessibleNameRequired"sv).value(); member_generator.set("accessible_name_required"sv, accessible_name_required ? "true"sv : "false"sv); @@ -358,7 +352,7 @@ DefaultValueType @name@::default_value_for_property_or_state(StateAndProperties { switch (state_or_property) { )~~~"); - TRY(implicit_value_for_role.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + implicit_value_for_role.for_each_member([&](auto& name, auto& value) { auto case_generator = member_generator.fork(); VERIFY(value.is_string()); case_generator.set("state_or_property"sv, aria_name_to_enum_name(name)); @@ -367,8 +361,7 @@ DefaultValueType @name@::default_value_for_property_or_state(StateAndProperties case StateAndProperties::@state_or_property@: return @implicit_value@; )~~~"); - return {}; - })); + }); member_generator.append(R"~~~( default: return {}; @@ -387,9 +380,7 @@ NameFromSource @name@::name_from_source() const } )~~~"); } - - return {}; - })); + }); generator.append("}"); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEasingFunctions.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEasingFunctions.cpp index d301e5532bc..928f0af0027 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEasingFunctions.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEasingFunctions.cpp @@ -56,12 +56,11 @@ namespace Web::CSS { )~~~"); generator.appendln("enum class EasingFunction {"); - TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { + easing_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); member_generator.set("name:titlecase", title_casify(name)); member_generator.appendln(" @name:titlecase@,"); - return {}; - })); + }); generator.appendln("};"); generator.appendln("Optional easing_function_from_string(StringView);"); @@ -108,16 +107,15 @@ namespace Web::CSS { Optional easing_function_from_string(StringView name) { )~~~"); - TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { + easing_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); - member_generator.set("name", TRY(String::from_deprecated_string(name))); + member_generator.set("name", name); member_generator.set("name:titlecase", title_casify(name)); member_generator.append(R"~~~( if (name.equals_ignoring_ascii_case("@name@"sv)) return EasingFunction::@name:titlecase@; )~~~"); - return {}; - })); + }); generator.append(R"~~~( return {}; } @@ -128,16 +126,15 @@ StringView to_string(EasingFunction easing_function) { switch (easing_function) { )~~~"); - TRY(easing_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { + easing_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); - member_generator.set("name", TRY(String::from_deprecated_string(name))); + member_generator.set("name", name); member_generator.set("name:titlecase", title_casify(name)); member_generator.append(R"~~~( case EasingFunction::@name:titlecase@: return "@name@"sv; )~~~"); - return {}; - })); + }); generator.append(R"~~~( default: VERIFY_NOT_REACHED(); @@ -150,7 +147,7 @@ EasingFunctionMetadata easing_function_metadata(EasingFunction easing_function) { switch (easing_function) { )~~~"); - TRY(easing_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + easing_data.for_each_member([&](auto& name, auto& value) { VERIFY(value.is_object()); auto member_generator = generator.fork(); @@ -163,7 +160,7 @@ EasingFunctionMetadata easing_function_metadata(EasingFunction easing_function) if (auto parameters = value.as_object().get_array("parameters"sv); parameters.has_value()) { bool first = true; // parameters: [ "", "" ] - TRY(parameters.value().try_for_each([&](JsonValue const& value) -> ErrorOr { + parameters.value().for_each([&](JsonValue const& value) { GenericLexer lexer { value.as_string() }; VERIFY(lexer.consume_specific('<')); auto parameter_type_name = lexer.consume_until([](char ch) { return ch == ' ' || ch == '>'; }); @@ -192,19 +189,17 @@ EasingFunctionMetadata easing_function_metadata(EasingFunction easing_function) member_generator.append(first ? " "sv : ", "sv); first = false; - member_generator.append(TRY(String::formatted( + member_generator.append(MUST(String::formatted( "{{ EasingFunctionParameterType::{}, {} }}", parameter_type, is_optional ? "true"sv : "false"sv))); - return {}; - })); + }); } member_generator.append(R"~~~( } }; )~~~"); - return {}; - })); + }); generator.append(R"~~~( default: VERIFY_NOT_REACHED(); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEnums.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEnums.cpp index 19ff3441d39..0ee418a7c01 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEnums.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSEnums.cpp @@ -54,7 +54,7 @@ enum class ValueID; )~~~"); - TRY(enums_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + enums_data.for_each_member([&](auto& name, auto& value) { VERIFY(value.is_array()); auto& members = value.as_array(); @@ -91,8 +91,7 @@ enum class ValueID; enum_generator.appendln("ValueID to_value_id(@name:titlecase@);"); enum_generator.appendln("StringView to_string(@name:titlecase@);"); enum_generator.append("\n"); - return {}; - })); + }); generator.appendln("}"); @@ -112,7 +111,7 @@ ErrorOr generate_implementation_file(JsonObject& enums_data, Core::File& f namespace Web::CSS { )~~~"); - TRY(enums_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { + enums_data.for_each_member([&](auto& name, auto& value) -> void { VERIFY(value.is_array()); auto& members = value.as_array(); @@ -182,7 +181,7 @@ StringView to_string(@name:titlecase@ value) auto member_name = member.to_deprecated_string(); if (member_name.contains('=')) continue; - member_generator.set("member:css", TRY(String::from_deprecated_string(member_name))); + member_generator.set("member:css", member_name); member_generator.set("member:titlecase", title_casify(member_name)); member_generator.append(R"~~~( @@ -196,8 +195,7 @@ StringView to_string(@name:titlecase@ value) } } )~~~"); - return {}; - })); + }); generator.appendln("}"); diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMathFunctions.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMathFunctions.cpp index af9632e9d2f..0cd2fc5a487 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMathFunctions.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSMathFunctions.cpp @@ -53,12 +53,11 @@ namespace Web::CSS { enum class MathFunction { )~~~"); - TRY(functions_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { + functions_data.for_each_member([&](auto& name, auto&) { auto member_generator = generator.fork(); member_generator.set("name:titlecase", title_casify(name)); member_generator.appendln(" @name:titlecase@,"sv); - return {}; - })); + }); generator.append(R"~~~( }; @@ -70,7 +69,7 @@ enum class MathFunction { return {}; } -ErrorOr generate_calculation_type_check(StringView calculation_variable_name, StringView parameter_types) +String generate_calculation_type_check(StringView calculation_variable_name, StringView parameter_types) { StringBuilder builder; auto allowed_types = parameter_types.split_view('|'); @@ -81,29 +80,29 @@ ErrorOr generate_calculation_type_check(StringView calculation_variable_ first_type_check = false; if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_angle()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_angle()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_dimension()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_dimension()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_flex()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_flex()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_frequency()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_frequency()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_length()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_length()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_number()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_number()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_percentage()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_percentage()"sv); } else if (allowed_type_name == ""sv) { - TRY(builder.try_appendff("{}.{}", calculation_variable_name, "matches_resolution()"sv)); + builder.appendff("{}.{}", calculation_variable_name, "matches_resolution()"sv); } else if (allowed_type_name == "