From kde-commits Thu Sep 20 12:12:28 2018 From: R.J.V. Bertin Date: Thu, 20 Sep 2018 12:12:28 +0000 To: kde-commits Subject: [kdevelop/5.3] plugins/astyle: [Astyle] Add Objective C to list of languages with formatters Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=153747125916160 Git commit a0992d3166317810c6d361fdfe6d3b40e9db39d5 by R.J.V. Bertin. Committed on 20/09/2018 at 12:12. Pushed by rjvbb into branch '5.3'. [Astyle] Add Objective C to list of languages with formatters Improves support for ObjC and ObjC++ in the Artistic Style plugin and makes those languages show up in the style selector. Differential Revision: https://phabricator.kde.org/D15532 M +219 -96 plugins/astyle/astyle_plugin.cpp M +4 -2 plugins/astyle/astyle_plugin.h M +4 -2 plugins/astyle/astyle_preferences.cpp M +2 -1 plugins/astyle/astyle_preferences.h https://commits.kde.org/kdevelop/a0992d3166317810c6d361fdfe6d3b40e9db39d5 diff --git a/plugins/astyle/astyle_plugin.cpp b/plugins/astyle/astyle_plugi= n.cpp index 1b26bb6fce..a4c3caa9fa 100644 --- a/plugins/astyle/astyle_plugin.cpp +++ b/plugins/astyle/astyle_plugin.cpp @@ -33,6 +33,186 @@ #include #include = +static const char formattingCxxSample[] =3D + "void func(){\n" + "\tif(isFoo(a,b))\n" + "\tbar(a,b);\n" + "if(isFoo)\n" + "\ta=3Dbar((b-c)*a,*d--);\n" + "if( isFoo( a,b ) )\n" + "\tbar(a, b);\n" + "if (isFoo) {isFoo=3Dfalse;cat << isFoo <::const_iterator it =3D list.begin();\n" + "}\n" + "namespace A {\n" + "namespace B {\n" + "class someClass {\n" + "void foo() {\n" + " if (true) {\n" + " func();\n" + " } else {\n" + " // bla\n" + " }\n" + "}\n" + "};\n" + "}\n" + "}\n"; + +static const char formattingObjCSample[] =3D + "void func(){\n" + "\tif(isFoo(a,b))\n" + "\tbar(a,b);\n" + "if(isFoo)\n" + "\ta=3Dbar((b-c)*a,*d--);\n" + "if( isFoo( a,b ) )\n" + "\tbar(a, b);\n" + "if (isFoo) {isFoo=3Dfalse;cat << isFoo <\n" + "\n" + "#define foobar(A)\\\n" + "\t{Foo();Bar();}\n" + "#define anotherFoo(B)\\\n" + "\treturn Bar()\n" + "\n" + "@interface Foo : Bar {\n" + "@private\n" + "\tid Baz;\n" + "}\n" + "- (void) init;\n" + "- (NSString*) description;\n" + "@property (retain) id Baz;\n" + "@end\n" + "\n" + "@interface Foo (Bar)\n" + "- (void)bar:(int) foo;\n" + "@end\n" + "\n" + "@implementation Foo (Bar)\n" + "\n" + "- (void) bar:(int) foo\n" + "{\n" + "\tswitch (foo) {\n" + "case 1:\n" + "a +=3D 1;\n" + "break;\n" + "case 2: {\n" + "a +=3D 2;\n" + "break;\n" + "}\n" + "}\n" + "if (isFoo) {\n" + "bar();\n" + "} else {\n" + "[anotherBar withFoo:self];\n" + "}\n" + "}\n" + "\n" + "@end\n" + "int foo()\n" + "while (isFoo)\n" + "{\n" + "\t// ...\n" + "\tgoto error;\n" + "\t/* .... */\n" + "error:\n" + "\t//...\n" + "}\n" + "\n" + "fooArray[] =3D { red,\n" + "\tgreen,\n" + "\tdarkblue};\n" + "fooFunction(barArg1,\n" + "\tbarArg2,\n" + "\tbarArg3);\n" + "struct foo { int bar() {} };\n"; + using namespace KDevelop; = K_PLUGIN_FACTORY_WITH_JSON(AStyleFactory, "kdevastyle.json", registerPlugi= n();) @@ -96,11 +276,14 @@ static SourceFormatterStyle::MimeList supportedMimeTyp= es() { return { {QStringLiteral("text/x-c++src"), QStringLiteral("C++")}, + {QStringLiteral("text/x-csrc"), QStringLiteral("C")}, {QStringLiteral("text/x-chdr"), QStringLiteral("C")}, {QStringLiteral("text/x-c++hdr"), QStringLiteral("C++")}, - {QStringLiteral("text/x-csrc"), QStringLiteral("C")}, {QStringLiteral("text/x-java"), QStringLiteral("Java")}, {QStringLiteral("text/x-csharp"), QStringLiteral("C#")}, + {QStringLiteral("text/x-objcsrc"), QStringLiteral("Objective-C")}, + {QStringLiteral("text/x-objc++src"), QStringLiteral("Objective-C++= ")}, + {QStringLiteral("text/x-objchdr"), QStringLiteral("Objective-C")}, }; } = @@ -137,17 +320,31 @@ QVector AStylePlugin::predefine= dStyles() const SettingsWidget* AStylePlugin::editStyleWidget(const QMimeType& mime) const { AStylePreferences::Language lang =3D AStylePreferences::CPP; - if(mime.inherits(QStringLiteral("text/x-java"))) + if (mime.inherits(QStringLiteral("text/x-java"))) lang =3D AStylePreferences::Java; - else if(mime.inherits(QStringLiteral("text/x-csharp"))) + else if (mime.inherits(QStringLiteral("text/x-csharp"))) lang =3D AStylePreferences::CSharp; + else if (mime.inherits(QStringLiteral("text/x-objcsrc")) || mime.inher= its(QStringLiteral("text/x-objc++src"))) { + // x-objc++src *should* inherit x-objcsrc but that is not always t= he case in practice + lang =3D AStylePreferences::ObjC; + } return new AStylePreferences(lang); } = -QString AStylePlugin::previewText(const SourceFormatterStyle& /*style*/, c= onst QMimeType& /*mime*/) const +QString AStylePlugin::previewText(const SourceFormatterStyle& /*style*/, c= onst QMimeType& mime) const { - return QLatin1String("// Indentation\n") + indentingSample() + QLatin1= String("\t// Formatting\n") - + formattingSample(); + AStylePreferences::Language lang; + if (mime.inherits(QStringLiteral("text/x-objcsrc")) || mime.inherits(Q= StringLiteral("text/x-objc++src"))) { + lang =3D AStylePreferences::ObjC; + } else { + lang =3D AStylePreferences::CPP; + } + // TODO: add previews for the other supported languages + return + QLatin1String("// Indentation\n") + + indentingSample(lang) + + QLatin1String("\t// Formatting\n") + + formattingSample(lang); } = AStylePlugin::Indentation AStylePlugin::indentation(const QUrl& url) const @@ -172,100 +369,26 @@ AStylePlugin::Indentation AStylePlugin::indentation(= const QUrl& url) const return ret; } = -QString AStylePlugin::formattingSample() +QString AStylePlugin::formattingSample(AStylePreferences::Language lang) { - return QStringLiteral( - "void func(){\n" - "\tif(isFoo(a,b))\n" - "\tbar(a,b);\n" - "if(isFoo)\n" - "\ta=3Dbar((b-c)*a,*d--);\n" - "if( isFoo( a,b ) )\n" - "\tbar(a, b);\n" - "if (isFoo) {isFoo=3Dfalse;cat << isFoo <::const_iterator it =3D list.begin();\n" - "}\n" - "namespace A {\n" - "namespace B {\n" - "class someClass {\n" - "void foo() {\n" - " if (true) {\n" - " func();\n" - " } else {\n" - " // bla\n" - " }\n" - "}\n" - "};\n" - "}\n" - "}\n" - ); + switch (lang) { + case AStylePreferences::ObjC: + return QLatin1String(formattingObjCSample); + default: + return QLatin1String(formattingCxxSample); + } + Q_UNREACHABLE(); } = -QString AStylePlugin::indentingSample() +QString AStylePlugin::indentingSample(AStylePreferences::Language lang) { - return QStringLiteral( - "#define foobar(A)\\\n" - "{Foo();Bar();}\n" - "#define anotherFoo(B)\\\n" - "return Bar()\n" - "\n" - "namespace Bar\n" - "{\n" - "class Foo\n" - "{public:\n" - "Foo();\n" - "virtual ~Foo();\n" - "};\n" - "void bar(int foo)\n" - "{\n" - "switch (foo)\n" - "{\n" - "case 1:\n" - "a+=3D1;\n" - "break;\n" - "case 2:\n" - "{\n" - "a +=3D 2;\n" - " break;\n" - "}\n" - "}\n" - "if (isFoo)\n" - "{\n" - "bar();\n" - "}\n" - "else\n" - "{\n" - "anotherBar();\n" - "}\n" - "}\n" - "int foo()\n" - "\twhile(isFoo)\n" - "\t\t{\n" - "\t\t\t// ...\n" - "\t\t\tgoto error;\n" - "\t\t/* .... */\n" - "\t\terror:\n" - "\t\t\t//...\n" - "\t\t}\n" - "\t}\n" - "fooArray[]=3D{ red,\n" - "\tgreen,\n" - "\tdarkblue};\n" - "fooFunction(barArg1,\n" - "\tbarArg2,\n" - "\tbarArg3);\n" - "struct foo{ int bar() {} };\n" - ); + switch (lang) { + case AStylePreferences::ObjC: + return QLatin1String(indentingObjCSample); + default: + return QLatin1String(indentingCxxSample); + } + Q_UNREACHABLE(); } = #include "astyle_plugin.moc" diff --git a/plugins/astyle/astyle_plugin.h b/plugins/astyle/astyle_plugin.h index cce4a31831..babda5fede 100644 --- a/plugins/astyle/astyle_plugin.h +++ b/plugins/astyle/astyle_plugin.h @@ -22,6 +22,8 @@ Copyright (C) 2001 Matthias H=C3=B6lzer-Kl=C3=BCpfel #ifndef ASTYLEPLUGIN_H #define ASTYLEPLUGIN_H = +#include "astyle_preferences.h" + #include #include = @@ -66,8 +68,8 @@ public: */ Indentation indentation(const QUrl &url) const override; = - static QString formattingSample(); - static QString indentingSample(); + static QString formattingSample(AStylePreferences::Language lang); + static QString indentingSample(AStylePreferences::Language lang); = private: QScopedPointer m_formatter; diff --git a/plugins/astyle/astyle_preferences.cpp b/plugins/astyle/astyle_= preferences.cpp index c2dcc7d222..9a99025d62 100644 --- a/plugins/astyle/astyle_preferences.cpp +++ b/plugins/astyle/astyle_preferences.cpp @@ -62,10 +62,12 @@ const int POINTERALIGN_TYPE =3D 3; AStylePreferences::AStylePreferences(Language lang, QWidget *parent) : SettingsWidget(parent) , m_formatter(new AStyleFormatter) + , m_currentLanguage(lang) { setupUi(this); switch(lang) { case AStylePreferences::CPP: + case AStylePreferences::ObjC: m_formatter->setCStyle(); break; case AStylePreferences::Java: @@ -250,9 +252,9 @@ void AStylePreferences::updatePreviewText(bool emitChan= gedSignal) { Q_UNUSED(emitChangedSignal); if(tabWidget->currentIndex() =3D=3D 0) - emit previewTextChanged(AStylePlugin::indentingSample()); + emit previewTextChanged(AStylePlugin::indentingSample(m_currentLan= guage)); else - emit previewTextChanged(AStylePlugin::formattingSample()); + emit previewTextChanged(AStylePlugin::formattingSample(m_currentLa= nguage)); } = void AStylePreferences::currentTabChanged() diff --git a/plugins/astyle/astyle_preferences.h b/plugins/astyle/astyle_pr= eferences.h index ccc7ca3bcf..cf2ff6553a 100644 --- a/plugins/astyle/astyle_preferences.h +++ b/plugins/astyle/astyle_preferences.h @@ -31,7 +31,7 @@ class AStylePreferences : public KDevelop::SettingsWidget= , public Ui::AStylePref Q_OBJECT = public: - enum Language { CPP, Java, CSharp}; + enum Language { CPP, Java, CSharp, ObjC}; = explicit AStylePreferences(Language lang=3DCPP, QWidget *parent=3Dnull= ptr); ~AStylePreferences() override; @@ -59,6 +59,7 @@ private Q_SLOTS: private: QScopedPointer m_formatter; bool m_enableWidgetSignals; + const Language m_currentLanguage; }; = #endif // ASTYLEPREFERENCES_H