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