浏览代码

gml-format+Playground: Print GML parsing error on formatting failure

Idan Horowitz 3 年之前
父节点
当前提交
4c451422c3
共有 3 个文件被更改,包括 10 次插入12 次删除
  1. 4 4
      Userland/DevTools/Playground/main.cpp
  2. 2 5
      Userland/Libraries/LibGUI/GML/Formatter.h
  3. 4 3
      Userland/Utilities/gml-format.cpp

+ 4 - 4
Userland/DevTools/Playground/main.cpp

@@ -215,13 +215,13 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
 
     auto edit_menu = TRY(window->try_add_menu("&Edit"));
     TRY(edit_menu->try_add_action(GUI::Action::create("&Format GML", { Mod_Ctrl | Mod_Shift, Key_I }, [&](auto&) {
-        auto formatted_gml = GUI::GML::format_gml(editor->text());
-        if (!formatted_gml.is_null()) {
-            editor->set_text(formatted_gml);
+        auto formatted_gml_or_error = GUI::GML::format_gml(editor->text());
+        if (!formatted_gml_or_error.is_error()) {
+            editor->set_text(formatted_gml_or_error.release_value());
         } else {
             GUI::MessageBox::show(
                 window,
-                "GML could not be formatted, please check the debug console for parsing errors.",
+                String::formatted("GML could not be formatted: {}", formatted_gml_or_error.error()),
                 "Error",
                 GUI::MessageBox::Type::Error);
         }

+ 2 - 5
Userland/Libraries/LibGUI/GML/Formatter.h

@@ -13,12 +13,9 @@
 
 namespace GUI::GML {
 
-inline String format_gml(StringView string)
+inline ErrorOr<String> format_gml(StringView string)
 {
-    auto ast = parse_gml(string);
-    if (ast.is_error())
-        return {};
-    return ast.value()->to_string();
+    return TRY(parse_gml(string))->to_string();
 }
 
 }

+ 4 - 3
Userland/Utilities/gml-format.cpp

@@ -23,11 +23,12 @@ ErrorOr<bool> format_file(StringView path, bool inplace)
         file = TRY(Core::File::open(path, open_mode));
     }
     auto contents = file->read_all();
-    auto formatted_gml = GUI::GML::format_gml(contents);
-    if (formatted_gml.is_null()) {
-        warnln("Failed to parse GML!");
+    auto formatted_gml_or_error = GUI::GML::format_gml(contents);
+    if (formatted_gml_or_error.is_error()) {
+        warnln("Failed to parse GML: {}", formatted_gml_or_error.error());
         return false;
     }
+    auto formatted_gml = formatted_gml_or_error.release_value();
     if (inplace && !read_from_stdin) {
         if (!file->seek(0) || !file->truncate(0)) {
             warnln("Could not truncate {}: {}", path, file->error_string());