Skip to content

Commit

Permalink
Add minifier failure message
Browse files Browse the repository at this point in the history
  • Loading branch information
seven332 committed Sep 6, 2024
1 parent e831457 commit 67a20bb
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 6 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -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
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"cmake.buildDirectory": "${workspaceFolder}/out/${buildType}"
"cmake.buildDirectory": "${workspaceFolder}/out/${buildType}",
"editor.formatOnSave": true
}
2 changes: 1 addition & 1 deletion minifier/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 2 additions & 1 deletion minifier/include/minifier/minifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
24 changes: 21 additions & 3 deletions minifier/src/minifier.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
#include "minifier/minifier.h"

#include "tint/tint.h"
#include <src/tint/lang/wgsl/reader/reader.h>
#include <src/tint/lang/wgsl/writer/writer.h>
#include <src/tint/utils/diagnostic/diagnostic.h>

#include <range/v3/all.hpp>

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<std::string>();
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(
Expand All @@ -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,
};
}

Expand Down
13 changes: 13 additions & 0 deletions minifier/src/minifier_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 2 additions & 0 deletions third_party/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,5 @@ set(TINT_BUILD_TESTS OFF)
add_subdirectory(dawn)

add_subdirectory(dawn/third_party/googletest)

add_subdirectory(range-v3)
1 change: 1 addition & 0 deletions third_party/range-v3
Submodule range-v3 added at a33616

0 comments on commit 67a20bb

Please sign in to comment.