r210739 - Give clang-format its own error category.

Alp Toker alp at nuanti.com
Wed Jun 11 20:23:01 PDT 2014


On 12/06/2014 05:50, Rafael Espindola wrote:
> Author: rafael
> Date: Wed Jun 11 21:50:04 2014
> New Revision: 210739
>
> URL: http://llvm.org/viewvc/llvm-project?rev=210739&view=rev
> Log:
> Give clang-format its own error category.
>
> The posix errno values are probably to the best thing to use for
> describing parse errors.
>
> This should also fix the mingw build.
>
> Modified:
>      cfe/trunk/include/clang/Format/Format.h
>      cfe/trunk/lib/Format/Format.cpp
>      cfe/trunk/test/Format/style-on-command-line.cpp
>      cfe/trunk/unittests/Format/FormatTest.cpp
>
> Modified: cfe/trunk/include/clang/Format/Format.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=210739&r1=210738&r2=210739&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Format/Format.h (original)
> +++ cfe/trunk/include/clang/Format/Format.h Wed Jun 11 21:50:04 2014
> @@ -27,6 +27,15 @@ class DiagnosticConsumer;
>   
>   namespace format {
>   
> +enum class ParseError { Success = 0, Error, Unsuitable };
> +class ParseErrorCategory final : public std::error_category {
> +public:
> +  const char *name() const LLVM_NOEXCEPT override;
> +  std::string message(int EV) const override;
> +};
> +const std::error_category &getParestCategory();
> +std::error_code make_error_code(ParseError e);
> +
>   /// \brief The \c FormatStyle is used to configure the formatting to follow
>   /// specific guidelines.
>   struct FormatStyle {
> @@ -506,4 +515,9 @@ FormatStyle getStyle(StringRef StyleName
>   } // end namespace format
>   } // end namespace clang
>   
> +namespace std {
> +template <>
> +struct is_error_code_enum<clang::format::ParseError> : std::true_type {};
> +}
> +
>   #endif // LLVM_CLANG_FORMAT_FORMAT_H
>
> Modified: cfe/trunk/lib/Format/Format.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=210739&r1=210738&r2=210739&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Format/Format.cpp (original)
> +++ cfe/trunk/lib/Format/Format.cpp Wed Jun 11 21:50:04 2014
> @@ -258,6 +258,29 @@ template <> struct DocumentListTraits<st
>   namespace clang {
>   namespace format {
>   
> +const std::error_category &getParestCategory() {
> +  static ParseErrorCategory C;
> +  return C;
> +}

Parest?

Alp.

> +std::error_code make_error_code(ParseError e) {
> +  return std::error_code(static_cast<int>(e), getParestCategory());
> +}
> +
> +const char *ParseErrorCategory::name() const LLVM_NOEXCEPT {
> +  return "clang-format.parse_error";
> +}
> +
> +std::string ParseErrorCategory::message(int EV) const {
> +  switch (static_cast<ParseError>(EV)) {
> +  case ParseError::Success:
> +    return "Success";
> +  case ParseError::Error:
> +    return "Invalid argument";
> +  case ParseError::Unsuitable:
> +    return "Unsuitable";
> +  }
> +}
> +
>   FormatStyle getLLVMStyle() {
>     FormatStyle LLVMStyle;
>     LLVMStyle.Language = FormatStyle::LK_Cpp;
> @@ -447,7 +470,7 @@ llvm::error_code parseConfiguration(Stri
>     FormatStyle::LanguageKind Language = Style->Language;
>     assert(Language != FormatStyle::LK_None);
>     if (Text.trim().empty())
> -    return llvm::make_error_code(std::errc::invalid_argument);
> +    return make_error_code(ParseError::Error);
>   
>     std::vector<FormatStyle> Styles;
>     llvm::yaml::Input Input(Text);
> @@ -463,14 +486,14 @@ llvm::error_code parseConfiguration(Stri
>     for (unsigned i = 0; i < Styles.size(); ++i) {
>       // Ensures that only the first configuration can skip the Language option.
>       if (Styles[i].Language == FormatStyle::LK_None && i != 0)
> -      return llvm::make_error_code(std::errc::invalid_argument);
> +      return make_error_code(ParseError::Error);
>       // Ensure that each language is configured at most once.
>       for (unsigned j = 0; j < i; ++j) {
>         if (Styles[i].Language == Styles[j].Language) {
>           DEBUG(llvm::dbgs()
>                 << "Duplicate languages in the config file on positions " << j
>                 << " and " << i << "\n");
> -        return llvm::make_error_code(std::errc::invalid_argument);
> +        return make_error_code(ParseError::Error);
>         }
>       }
>     }
> @@ -482,10 +505,10 @@ llvm::error_code parseConfiguration(Stri
>           Styles[i].Language == FormatStyle::LK_None) {
>         *Style = Styles[i];
>         Style->Language = Language;
> -      return llvm::error_code();
> +      return make_error_code(ParseError::Success);
>       }
>     }
> -  return llvm::make_error_code(std::errc::not_supported);
> +  return make_error_code(ParseError::Unsuitable);
>   }
>   
>   std::string configurationAsText(const FormatStyle &Style) {
> @@ -2049,7 +2072,7 @@ FormatStyle getStyle(StringRef StyleName
>           break;
>         }
>         if (llvm::error_code ec = parseConfiguration(Text->getBuffer(), &Style)) {
> -        if (ec == std::errc::not_supported) {
> +        if (ec == ParseError::Unsuitable) {
>             if (!UnsuitableConfigFiles.empty())
>               UnsuitableConfigFiles.append(", ");
>             UnsuitableConfigFiles.append(ConfigFile);
>
> Modified: cfe/trunk/test/Format/style-on-command-line.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Format/style-on-command-line.cpp?rev=210739&r1=210738&r2=210739&view=diff
> ==============================================================================
> --- cfe/trunk/test/Format/style-on-command-line.cpp (original)
> +++ cfe/trunk/test/Format/style-on-command-line.cpp Wed Jun 11 21:50:04 2014
> @@ -16,12 +16,12 @@ void f() {
>   // CHECK1: {{^        int\* i;$}}
>   // CHECK2: {{^       int \*i;$}}
>   // CHECK3: Unknown value for BasedOnStyle: invalid
> -// CHECK3: Error parsing -style: {{I|i}}nvalid argument, using LLVM style
> +// CHECK3: Error parsing -style: Invalid argument, using LLVM style
>   // CHECK3: {{^  int \*i;$}}
> -// CHECK4: Error parsing -style: {{I|i}}nvalid argument, using LLVM style
> +// CHECK4: Error parsing -style: Invalid argument, using LLVM style
>   // CHECK4: {{^  int \*i;$}}
>   // CHECK5: {{^     int\* i;$}}
> -// CHECK6: {{^Error reading .*\.clang-format: (I|i)nvalid argument}}
> +// CHECK6: {{^Error reading .*\.clang-format: Invalid argument}}
>   // CHECK6: {{^Can't find usable .clang-format, using webkit style$}}
>   // CHECK6: {{^    int\* i;$}}
>   // CHECK7: {{^      int\* i;$}}
>
> Modified: cfe/trunk/unittests/Format/FormatTest.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=210739&r1=210738&r2=210739&view=diff
> ==============================================================================
> --- cfe/trunk/unittests/Format/FormatTest.cpp (original)
> +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Jun 11 21:50:04 2014
> @@ -8181,10 +8181,9 @@ TEST_F(FormatTest, ParsesConfigurationWi
>     CHECK_PARSE("Language: Cpp\n"
>                 "IndentWidth: 12",
>                 IndentWidth, 12u);
> -  EXPECT_EQ(std::errc::not_supported,
> -            parseConfiguration("Language: JavaScript\n"
> -                               "IndentWidth: 34",
> -                               &Style));
> +  EXPECT_EQ(ParseError::Unsuitable, parseConfiguration("Language: JavaScript\n"
> +                                                       "IndentWidth: 34",
> +                                                       &Style));
>     EXPECT_EQ(12u, Style.IndentWidth);
>     CHECK_PARSE("IndentWidth: 56", IndentWidth, 56u);
>     EXPECT_EQ(FormatStyle::LK_Cpp, Style.Language);
> @@ -8194,9 +8193,9 @@ TEST_F(FormatTest, ParsesConfigurationWi
>                 "IndentWidth: 12",
>                 IndentWidth, 12u);
>     CHECK_PARSE("IndentWidth: 23", IndentWidth, 23u);
> -  EXPECT_EQ(std::errc::not_supported, parseConfiguration("Language: Cpp\n"
> -                                                         "IndentWidth: 34",
> -                                                         &Style));
> +  EXPECT_EQ(ParseError::Unsuitable, parseConfiguration("Language: Cpp\n"
> +                                                       "IndentWidth: 34",
> +                                                       &Style));
>     EXPECT_EQ(23u, Style.IndentWidth);
>     CHECK_PARSE("IndentWidth: 56", IndentWidth, 56u);
>     EXPECT_EQ(FormatStyle::LK_JavaScript, Style.Language);
> @@ -8253,24 +8252,21 @@ TEST_F(FormatTest, ParsesConfigurationWi
>     EXPECT_EQ(FormatStyle::BS_Stroustrup, Style.BreakBeforeBraces);
>     EXPECT_EQ(789u, Style.TabWidth);
>   
> -
> -  EXPECT_EQ(std::errc::invalid_argument,
> -            parseConfiguration("---\n"
> -                               "Language: JavaScript\n"
> -                               "IndentWidth: 56\n"
> -                               "---\n"
> -                               "IndentWidth: 78\n"
> -                               "...\n",
> -                               &Style));
> -  EXPECT_EQ(std::errc::invalid_argument,
> -            parseConfiguration("---\n"
> -                               "Language: JavaScript\n"
> -                               "IndentWidth: 56\n"
> -                               "---\n"
> -                               "Language: JavaScript\n"
> -                               "IndentWidth: 78\n"
> -                               "...\n",
> -                               &Style));
> +  EXPECT_EQ(ParseError::Error, parseConfiguration("---\n"
> +                                                  "Language: JavaScript\n"
> +                                                  "IndentWidth: 56\n"
> +                                                  "---\n"
> +                                                  "IndentWidth: 78\n"
> +                                                  "...\n",
> +                                                  &Style));
> +  EXPECT_EQ(ParseError::Error, parseConfiguration("---\n"
> +                                                  "Language: JavaScript\n"
> +                                                  "IndentWidth: 56\n"
> +                                                  "---\n"
> +                                                  "Language: JavaScript\n"
> +                                                  "IndentWidth: 78\n"
> +                                                  "...\n",
> +                                                  &Style));
>   
>     EXPECT_EQ(FormatStyle::LK_Cpp, Style.Language);
>   }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-- 
http://www.nuanti.com
the browser experts




More information about the cfe-commits mailing list