From acb600496b3b07149a5d30fba790b105eabfc90d Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sat, 17 Jun 2023 14:29:33 +0100 Subject: [PATCH] CodeGenerators: Port GenerateCSSTransformFunctions to new SourceGen API --- .../LibWeb/GenerateCSSTransformFunctions.cpp | 97 ++++++++++--------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSTransformFunctions.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSTransformFunctions.cpp index 5fafb8db6e..c50782f57e 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSTransformFunctions.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateCSSTransformFunctions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Sam Atkins + * Copyright (c) 2022-2023, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -39,13 +39,13 @@ ErrorOr serenity_main(Main::Arguments arguments) return 0; } -static DeprecatedString title_casify_transform_function(StringView input) +static ErrorOr title_casify_transform_function(StringView input) { // Transform function names look like `fooBar`, so we just have to make the first character uppercase. StringBuilder builder; - builder.append(toupper(input[0])); - builder.append(input.substring_view(1)); - return builder.to_deprecated_string(); + TRY(builder.try_append(toupper(input[0]))); + TRY(builder.try_append(input.substring_view(1))); + return builder.to_string(); } ErrorOr generate_header_file(JsonObject& transforms_data, Core::File& file) @@ -53,7 +53,7 @@ ErrorOr generate_header_file(JsonObject& transforms_data, Core::File& file StringBuilder builder; SourceGenerator generator { builder }; - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( #pragma once #include @@ -62,21 +62,21 @@ ErrorOr generate_header_file(JsonObject& transforms_data, Core::File& file namespace Web::CSS { -)~~~"); +)~~~")); - generator.appendln("enum class TransformFunction {"); + TRY(generator.try_appendln("enum class TransformFunction {")); TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { auto member_generator = TRY(generator.fork()); - member_generator.set("name:titlecase", title_casify_transform_function(name)); - member_generator.appendln(" @name:titlecase@,"); + TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); + TRY(member_generator.try_appendln(" @name:titlecase@,")); return {}; })); - generator.appendln("};"); + TRY(generator.try_appendln("};")); - generator.appendln("Optional transform_function_from_string(StringView);"); - generator.appendln("StringView to_string(TransformFunction);"); + TRY(generator.try_appendln("Optional transform_function_from_string(StringView);")); + TRY(generator.try_appendln("StringView to_string(TransformFunction);")); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( enum class TransformFunctionParameterType { Angle, Length, @@ -93,9 +93,9 @@ struct TransformFunctionMetadata { Vector parameters; }; TransformFunctionMetadata transform_function_metadata(TransformFunction); -)~~~"); +)~~~")); - generator.appendln("\n}"); + TRY(generator.try_appendln("\n}")); TRY(file.write_until_depleted(generator.as_string_view().bytes())); return {}; @@ -106,72 +106,72 @@ ErrorOr generate_implementation_file(JsonObject& transforms_data, Core::Fi StringBuilder builder; SourceGenerator generator { builder }; - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( #include #include namespace Web::CSS { -)~~~"); +)~~~")); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( Optional transform_function_from_string(StringView name) { -)~~~"); +)~~~")); TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { auto member_generator = TRY(generator.fork()); - member_generator.set("name", name); - member_generator.set("name:titlecase", title_casify_transform_function(name)); - member_generator.append(R"~~~( + TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); + TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); + TRY(member_generator.try_append(R"~~~( if (name.equals_ignoring_ascii_case("@name@"sv)) return TransformFunction::@name:titlecase@; -)~~~"); +)~~~")); return {}; })); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( return {}; } -)~~~"); +)~~~")); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( StringView to_string(TransformFunction transform_function) { switch (transform_function) { -)~~~"); +)~~~")); TRY(transforms_data.try_for_each_member([&](auto& name, auto&) -> ErrorOr { auto member_generator = TRY(generator.fork()); - member_generator.set("name", name); - member_generator.set("name:titlecase", title_casify_transform_function(name)); - member_generator.append(R"~~~( + TRY(member_generator.set("name", TRY(String::from_deprecated_string(name)))); + TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); + TRY(member_generator.try_append(R"~~~( case TransformFunction::@name:titlecase@: return "@name@"sv; -)~~~"); +)~~~")); return {}; })); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( default: VERIFY_NOT_REACHED(); } } -)~~~"); +)~~~")); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( TransformFunctionMetadata transform_function_metadata(TransformFunction transform_function) { switch (transform_function) { -)~~~"); +)~~~")); TRY(transforms_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr { VERIFY(value.is_object()); auto member_generator = TRY(generator.fork()); - member_generator.set("name:titlecase", title_casify_transform_function(name)); - member_generator.append(R"~~~( + TRY(member_generator.set("name:titlecase", TRY(title_casify_transform_function(name)))); + TRY(member_generator.try_append(R"~~~( case TransformFunction::@name:titlecase@: return TransformFunctionMetadata { - .parameters = {)~~~"); + .parameters = {)~~~")); JsonArray const& parameters = value.as_object().get_array("parameters"sv).value(); bool first = true; - parameters.for_each([&](JsonValue const& value) { + TRY(parameters.try_for_each([&](JsonValue const& value) -> ErrorOr { GenericLexer lexer { value.as_object().get_deprecated_string("type"sv).value() }; VERIFY(lexer.consume_specific('<')); auto parameter_type_name = lexer.consume_until('>'); @@ -189,25 +189,26 @@ TransformFunctionMetadata transform_function_metadata(TransformFunction transfor else VERIFY_NOT_REACHED(); - member_generator.append(first ? " "sv : ", "sv); + TRY(member_generator.try_append(first ? " "sv : ", "sv)); first = false; - member_generator.append(DeprecatedString::formatted("{{ TransformFunctionParameterType::{}, {}}}", parameter_type, value.as_object().get("required"sv)->to_deprecated_string())); - }); + TRY(member_generator.try_append(TRY(String::formatted("{{ TransformFunctionParameterType::{}, {}}}", parameter_type, value.as_object().get("required"sv)->to_deprecated_string())))); + return {}; + })); - member_generator.append(R"~~~( } + TRY(member_generator.try_append(R"~~~( } }; -)~~~"); +)~~~")); return {}; })); - generator.append(R"~~~( + TRY(generator.try_append(R"~~~( default: VERIFY_NOT_REACHED(); } } -)~~~"); +)~~~")); - generator.appendln("\n}"); + TRY(generator.try_appendln("\n}")); TRY(file.write_until_depleted(generator.as_string_view().bytes())); return {};