mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 17:52:45 +00:00 
			
		
		
		
	CodeGenerators: Port GenerateCSSEnums to new SourceGenerator API
This commit is contained in:
		
							parent
							
								
									8e53e5afc4
								
							
						
					
					
						commit
						17473e3d5e
					
				
					 1 changed files with 37 additions and 38 deletions
				
			
		|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org> | ||||
|  * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org> | ||||
|  * | ||||
|  * SPDX-License-Identifier: BSD-2-Clause | ||||
|  */ | ||||
|  | @ -43,7 +43,7 @@ ErrorOr<void> generate_header_file(JsonObject& enums_data, Core::File& file) | |||
|     StringBuilder builder; | ||||
|     SourceGenerator generator { builder }; | ||||
| 
 | ||||
|     generator.append(R"~~~( | ||||
|     TRY(generator.try_append(R"~~~( | ||||
| #pragma once | ||||
| 
 | ||||
| #include <AK/Optional.h> | ||||
|  | @ -52,7 +52,7 @@ namespace Web::CSS { | |||
| 
 | ||||
| enum class ValueID; | ||||
| 
 | ||||
| )~~~"); | ||||
| )~~~")); | ||||
| 
 | ||||
|     TRY(enums_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr<void> { | ||||
|         VERIFY(value.is_array()); | ||||
|  | @ -65,16 +65,16 @@ enum class ValueID; | |||
|         // Find the smallest possible type to use.
 | ||||
|         auto member_max_value = members.size() - 1; | ||||
|         if (NumericLimits<u8>::max() >= member_max_value) { | ||||
|             enum_generator.set("enum_type", "u8"); | ||||
|             TRY(enum_generator.set("enum_type", "u8"_short_string)); | ||||
|         } else if (NumericLimits<u16>::max() >= member_max_value) { | ||||
|             enum_generator.set("enum_type", "u16"); | ||||
|             TRY(enum_generator.set("enum_type", "u16"_short_string)); | ||||
|         } else if (NumericLimits<u32>::max() >= member_max_value) { | ||||
|             enum_generator.set("enum_type", "u32"); | ||||
|             TRY(enum_generator.set("enum_type", "u32"_short_string)); | ||||
|         } else { | ||||
|             enum_generator.set("enum_type", "u64"); | ||||
|             TRY(enum_generator.set("enum_type", "u64"_short_string)); | ||||
|         } | ||||
| 
 | ||||
|         enum_generator.appendln("enum class @name:titlecase@ : @enum_type@ {"); | ||||
|         TRY(enum_generator.try_appendln("enum class @name:titlecase@ : @enum_type@ {")); | ||||
| 
 | ||||
|         for (auto& member : members.values()) { | ||||
|             auto member_name = member.to_deprecated_string(); | ||||
|  | @ -83,19 +83,18 @@ enum class ValueID; | |||
|                 continue; | ||||
|             auto member_generator = TRY(enum_generator.fork()); | ||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); | ||||
|             member_generator.appendln("    @member:titlecase@,"); | ||||
|             TRY(member_generator.try_appendln("    @member:titlecase@,")); | ||||
|         } | ||||
| 
 | ||||
|         enum_generator.appendln("};"); | ||||
|         enum_generator.appendln("Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID);"); | ||||
|         enum_generator.appendln("ValueID to_value_id(@name:titlecase@);"); | ||||
|         enum_generator.appendln("StringView to_string(@name:titlecase@);"); | ||||
|         enum_generator.append("\n"); | ||||
| 
 | ||||
|         TRY(enum_generator.try_appendln("};")); | ||||
|         TRY(enum_generator.try_appendln("Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID);")); | ||||
|         TRY(enum_generator.try_appendln("ValueID to_value_id(@name:titlecase@);")); | ||||
|         TRY(enum_generator.try_appendln("StringView to_string(@name:titlecase@);")); | ||||
|         TRY(enum_generator.try_append("\n")); | ||||
|         return {}; | ||||
|     })); | ||||
| 
 | ||||
|     generator.appendln("}"); | ||||
|     TRY(generator.try_appendln("}")); | ||||
| 
 | ||||
|     TRY(file.write_until_depleted(generator.as_string_view().bytes())); | ||||
|     return {}; | ||||
|  | @ -106,12 +105,12 @@ ErrorOr<void> generate_implementation_file(JsonObject& enums_data, Core::File& f | |||
|     StringBuilder builder; | ||||
|     SourceGenerator generator { builder }; | ||||
| 
 | ||||
|     generator.append(R"~~~( | ||||
|     TRY(generator.try_append(R"~~~( | ||||
| #include <LibWeb/CSS/Enums.h> | ||||
| #include <LibWeb/CSS/ValueID.h> | ||||
| 
 | ||||
| namespace Web::CSS { | ||||
| )~~~"); | ||||
| )~~~")); | ||||
| 
 | ||||
|     TRY(enums_data.try_for_each_member([&](auto& name, auto& value) -> ErrorOr<void> { | ||||
|         VERIFY(value.is_array()); | ||||
|  | @ -121,10 +120,10 @@ namespace Web::CSS { | |||
|         TRY(enum_generator.set("name:titlecase", TRY(title_casify(name)))); | ||||
|         TRY(enum_generator.set("name:snakecase", TRY(snake_casify(name)))); | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
| Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID value_id) | ||||
| { | ||||
|     switch (value_id) {)~~~"); | ||||
|     switch (value_id) {)~~~")); | ||||
| 
 | ||||
|         for (auto& member : members.values()) { | ||||
|             auto member_generator = TRY(enum_generator.fork()); | ||||
|  | @ -137,22 +136,22 @@ Optional<@name:titlecase@> value_id_to_@name:snakecase@(ValueID value_id) | |||
|                 TRY(member_generator.set("valueid:titlecase", TRY(title_casify(member_name)))); | ||||
|                 TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); | ||||
|             } | ||||
|             member_generator.append(R"~~~( | ||||
|             TRY(member_generator.try_append(R"~~~( | ||||
|     case ValueID::@valueid:titlecase@: | ||||
|         return @name:titlecase@::@member:titlecase@;)~~~"); | ||||
|         return @name:titlecase@::@member:titlecase@;)~~~")); | ||||
|         } | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
|     default: | ||||
|         return {}; | ||||
|     } | ||||
| } | ||||
| )~~~"); | ||||
| )~~~")); | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
| ValueID to_value_id(@name:titlecase@ @name:snakecase@_value) | ||||
| { | ||||
|     switch (@name:snakecase@_value) {)~~~"); | ||||
|     switch (@name:snakecase@_value) {)~~~")); | ||||
| 
 | ||||
|         for (auto& member : members.values()) { | ||||
|             auto member_generator = TRY(enum_generator.fork()); | ||||
|  | @ -161,46 +160,46 @@ ValueID to_value_id(@name:titlecase@ @name:snakecase@_value) | |||
|                 continue; | ||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); | ||||
| 
 | ||||
|             member_generator.append(R"~~~( | ||||
|             TRY(member_generator.try_append(R"~~~( | ||||
|     case @name:titlecase@::@member:titlecase@: | ||||
|         return ValueID::@member:titlecase@;)~~~"); | ||||
|         return ValueID::@member:titlecase@;)~~~")); | ||||
|         } | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
|     default: | ||||
|         VERIFY_NOT_REACHED(); | ||||
|     } | ||||
| } | ||||
| )~~~"); | ||||
| )~~~")); | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
| StringView to_string(@name:titlecase@ value) | ||||
| { | ||||
|     switch (value) {)~~~"); | ||||
|     switch (value) {)~~~")); | ||||
| 
 | ||||
|         for (auto& member : members.values()) { | ||||
|             auto member_generator = TRY(enum_generator.fork()); | ||||
|             auto member_name = member.to_deprecated_string(); | ||||
|             if (member_name.contains('=')) | ||||
|                 continue; | ||||
|             member_generator.set("member:css", member_name); | ||||
|             TRY(member_generator.set("member:css", TRY(String::from_deprecated_string(member_name)))); | ||||
|             TRY(member_generator.set("member:titlecase", TRY(title_casify(member_name)))); | ||||
| 
 | ||||
|             member_generator.append(R"~~~( | ||||
|             TRY(member_generator.try_append(R"~~~( | ||||
|     case @name:titlecase@::@member:titlecase@: | ||||
|         return "@member:css@"sv;)~~~"); | ||||
|         return "@member:css@"sv;)~~~")); | ||||
|         } | ||||
| 
 | ||||
|         enum_generator.append(R"~~~( | ||||
|         TRY(enum_generator.try_append(R"~~~( | ||||
|     default: | ||||
|         VERIFY_NOT_REACHED(); | ||||
|     } | ||||
| } | ||||
| )~~~"); | ||||
| )~~~")); | ||||
|         return {}; | ||||
|     })); | ||||
| 
 | ||||
|     generator.appendln("}"); | ||||
|     TRY(generator.try_appendln("}")); | ||||
| 
 | ||||
|     TRY(file.write_until_depleted(generator.as_string_view().bytes())); | ||||
|     return {}; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sam Atkins
						Sam Atkins