From 67a20bbfb5d969bb595d2e657257d344fb42c4d1 Mon Sep 17 00:00:00 2001 From: seven332 Date: Fri, 6 Sep 2024 23:02:24 +0800 Subject: [PATCH] Add minifier failure message --- .gitmodules | 3 +++ .vscode/settings.json | 3 ++- minifier/CMakeLists.txt | 2 +- minifier/include/minifier/minifier.h | 3 ++- minifier/src/minifier.cpp | 24 +++++++++++++++++++++--- minifier/src/minifier_test.cpp | 13 +++++++++++++ third_party/CMakeLists.txt | 2 ++ third_party/range-v3 | 1 + 8 files changed, 45 insertions(+), 6 deletions(-) create mode 160000 third_party/range-v3 diff --git a/.gitmodules b/.gitmodules index 3644fdf..659aa7f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "third_party/dawn"] path = third_party/dawn url = https://dawn.googlesource.com/dawn +[submodule "third_party/range-v3"] + path = third_party/range-v3 + url = https://github.com/ericniebler/range-v3.git diff --git a/.vscode/settings.json b/.vscode/settings.json index 5a74ba0..a8d3e27 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "cmake.buildDirectory": "${workspaceFolder}/out/${buildType}" + "cmake.buildDirectory": "${workspaceFolder}/out/${buildType}", + "editor.formatOnSave": true } diff --git a/minifier/CMakeLists.txt b/minifier/CMakeLists.txt index 829329a..dff2f84 100644 --- a/minifier/CMakeLists.txt +++ b/minifier/CMakeLists.txt @@ -1,6 +1,6 @@ add_library(minifier src/minifier.cpp) target_include_directories(minifier PUBLIC include PRIVATE src) -target_link_libraries(minifier PRIVATE tint_api) +target_link_libraries(minifier PRIVATE tint_api range-v3) add_executable(minifier_test src/minifier_test.cpp) target_link_libraries(minifier_test PRIVATE minifier gtest_main) diff --git a/minifier/include/minifier/minifier.h b/minifier/include/minifier/minifier.h index 8c3f426..1fba04d 100644 --- a/minifier/include/minifier/minifier.h +++ b/minifier/include/minifier/minifier.h @@ -9,7 +9,8 @@ struct Options {}; struct Result { std::string wgsl; - bool failed; + std::string failureMessage; + bool failed = false; }; Result Minify(std::string_view data, const Options& options); diff --git a/minifier/src/minifier.cpp b/minifier/src/minifier.cpp index fbc3c32..189507b 100644 --- a/minifier/src/minifier.cpp +++ b/minifier/src/minifier.cpp @@ -1,11 +1,27 @@ #include "minifier/minifier.h" -#include "tint/tint.h" +#include +#include +#include + +#include namespace wgslx::minifier { static constexpr const auto* DefaultPath = "temp.wgsl"; +static Result GenerateError(const tint::diag::List& diagnostics) { + auto message = diagnostics | ranges::views::filter([](const tint::diag::Diagnostic& d) { + return d.severity == tint::diag::Severity::Error; + }) | + ranges::views::transform([](const tint::diag::Diagnostic& d) { return d.message.Plain(); }) | + ranges::views::join('\n') | ranges::to(); + return { + .failed = true, + .failureMessage = std::move(message), + }; +} + Result Minify(std::string_view data, const Options& options) { tint::Source::File file(DefaultPath, data); auto program = tint::wgsl::reader::Parse( @@ -15,15 +31,17 @@ Result Minify(std::string_view data, const Options& options) { .mode = tint::wgsl::ValidationMode::kFull, } ); + if (program.Diagnostics().ContainsErrors()) { + return GenerateError(program.Diagnostics()); + } auto result = tint::wgsl::writer::Generate(program, {}); if (result != tint::Success) { - return {.failed = true}; + return GenerateError(result.Failure().reason); } return { .wgsl = result->wgsl, - .failed = false, }; } diff --git a/minifier/src/minifier_test.cpp b/minifier/src/minifier_test.cpp index 417fc6b..3733e17 100644 --- a/minifier/src/minifier_test.cpp +++ b/minifier/src/minifier_test.cpp @@ -17,4 +17,17 @@ fn average(a: f32, b: f32) -> f32 { EXPECT_EQ(result.wgsl, "fn average(a : f32, b : f32) -> f32 {\n return ((a + b) / 2);\n}\n"); } +TEST(minifier, MinifyFailed) { + auto result = Minify( + R"( +fn average(a: f32, b: f3) -> f32 { + return (a + b) / 2 +} +)", + {} + ); + EXPECT_TRUE(result.failed); + EXPECT_EQ(result.failureMessage, "expected ';' for return statement"); +} + } // namespace wgslx::minifier diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt index 2cbe227..4dc9c16 100644 --- a/third_party/CMakeLists.txt +++ b/third_party/CMakeLists.txt @@ -25,3 +25,5 @@ set(TINT_BUILD_TESTS OFF) add_subdirectory(dawn) add_subdirectory(dawn/third_party/googletest) + +add_subdirectory(range-v3) diff --git a/third_party/range-v3 b/third_party/range-v3 new file mode 160000 index 0000000..a33616b --- /dev/null +++ b/third_party/range-v3 @@ -0,0 +1 @@ +Subproject commit a33616bfdb642744acaa937a3f258fba384b7fd4