Git commit aa4c53ae64ea4cfe801386c0a01be3d38e3b09e5 by Waqar Ahmed. Committed on 21/05/2024 at 11:45. Pushed by waqar into branch 'master'.
Add yaml formatting support M +11 -0 addons/format/FormatterFactory.h M +4 -0 addons/format/FormatterSettings.json M +2 -0 addons/format/Formatters.cpp M +1 -0 addons/format/Formatters.h M +4 -0 addons/format/FormattersEnum.h M +2 -0 addons/format/autotests/test_formatapply.cpp M +9 -0 doc/kate/plugins.docbook https://invent.kde.org/utilities/kate/-/commit/aa4c53ae64ea4cfe801386c0a01be3d38e3b09e5 diff --git a/addons/format/FormatterFactory.h b/addons/format/FormatterFactory.h index 36241b451d..303a11b136 100644 --- a/addons/format/FormatterFactory.h +++ b/addons/format/FormatterFactory.h @@ -23,6 +23,7 @@ static AbstractFormatter *formatterForDoc(KTextEditor::Document *doc, const QJso return mode == QLatin1String(s) || mode.contains(QLatin1String(s)); }; + // NOTE: When adding a new formatter ensure that it is documented in plugins.docbook if (is_or_contains("c++") || is("c") || is("objective-c") || is("objective-c++") || is("protobuf")) { return new ClangFormat(config, doc); } else if (is("dart")) { @@ -73,6 +74,16 @@ static AbstractFormatter *formatterForDoc(KTextEditor::Document *doc, const QJso return nixfmt(config, doc); } else if (is("qml")) { return new QMLFormat(config, doc); + } else if (is("yaml")) { + const auto configValue = config.value(QStringLiteral("formatterForYaml")).toString(); + Formatters f = formatterForName(configValue, Formatters::YamlFmt); + if (f == Formatters::YamlFmt) { + return yamlfmt(config, doc); + } else if (f == Formatters::Prettier) { + return new PrettierFormat(config, doc); + } + Utils::showMessage(i18n("Unknown formatterForYaml: %1, falling back to yamlfmt", configValue), {}, i18n("Format"), MessageType::Error); + return yamlfmt(config, doc); } static QList<QString> alreadyWarned; diff --git a/addons/format/FormatterSettings.json b/addons/format/FormatterSettings.json index 4849ee335c..2f80922ccc 100644 --- a/addons/format/FormatterSettings.json +++ b/addons/format/FormatterSettings.json @@ -2,6 +2,7 @@ "formatOnSave": true, "formatterForJson": "jq", "formatterForPython": "ruff", + "formatterForYaml": "yamlfmt", "clang-format": { "command": ["clang-format", "--fallback-style=Webkit"], "formatModifiedLinesOnly": true, @@ -51,5 +52,8 @@ }, "qmlformat": { "command": ["qmlformat"] + }, + "yamlfmt": { + "command": ["yamlfmt", "-quiet", "-"] } } diff --git a/addons/format/Formatters.cpp b/addons/format/Formatters.cpp index d1f4ec3852..c146752fbc 100644 --- a/addons/format/Formatters.cpp +++ b/addons/format/Formatters.cpp @@ -98,6 +98,8 @@ static QString filenameFromMode(KTextEditor::Document *doc) return prefix.append(QLatin1String(".css")); } else if (is("html")) { return prefix.append(QLatin1String(".html")); + } else if (is("yaml")) { + return prefix.append(QLatin1String(".yml")); } return {}; } diff --git a/addons/format/Formatters.h b/addons/format/Formatters.h index 917b357e49..6a77b9de0d 100644 --- a/addons/format/Formatters.h +++ b/addons/format/Formatters.h @@ -315,6 +315,7 @@ DEFINE_STDIN_FORMATTER(cMakeFormat, "cmake-format", (QStringList{S("-")})); DEFINE_STDIN_FORMATTER(dfmt, "dfmt", (QStringList{})); DEFINE_STDIN_FORMATTER(fishIndent, "fish_indent", (QStringList{})); DEFINE_STDIN_FORMATTER(nixfmt, "nixfmt", (QStringList{})); +DEFINE_STDIN_FORMATTER(yamlfmt, "yamlfmt", (QStringList{})); inline AbstractFormatter *shfmt(const QJsonObject &obj, KTextEditor::Document *parent) { diff --git a/addons/format/FormattersEnum.h b/addons/format/FormattersEnum.h index ccb3a4cc32..6fb864d5b2 100644 --- a/addons/format/FormattersEnum.h +++ b/addons/format/FormattersEnum.h @@ -16,6 +16,7 @@ enum class Formatters { XmlLint, Autopep8, Ruff, + YamlFmt, // keep at end COUNT, @@ -45,5 +46,8 @@ inline Formatters formatterForName(const QString &name, Formatters defaultValue) if (eq("ruff")) { return Formatters::Ruff; } + if (eq("yamlfmt")) { + return Formatters::YamlFmt; + } return defaultValue; } diff --git a/addons/format/autotests/test_formatapply.cpp b/addons/format/autotests/test_formatapply.cpp index dc0dea87e8..98cb4024d8 100644 --- a/addons/format/autotests/test_formatapply.cpp +++ b/addons/format/autotests/test_formatapply.cpp @@ -67,6 +67,8 @@ void FormatApplyTest::testFormatterForName() return "autopep8"; case Formatters::Ruff: return "ruff"; + case Formatters::YamlFmt: + return "yamlfmt"; case Formatters::COUNT: Q_ASSERT(false); return ""; diff --git a/doc/kate/plugins.docbook b/doc/kate/plugins.docbook index 2fcf5f71c1..18df02c36c 100644 --- a/doc/kate/plugins.docbook +++ b/doc/kate/plugins.docbook @@ -4465,6 +4465,8 @@ The current list of supported languages and formatters are as follows: <listitem><para>Fish Shell - <command>fish_indent</command></para></listitem> <listitem><para>Bash - <command>shfmt</command></para></listitem> <listitem><para>Nix - <command>nixfmt</command></para></listitem> +<listitem><para>QML - <command>qmlformat</command></para></listitem> +<listitem><para>HTML - <command>prettier</command></para></listitem> <listitem><para>Python <itemizedlist> @@ -4473,6 +4475,13 @@ The current list of supported languages and formatters are as follows: </itemizedlist> </para></listitem> +<listitem><para>YAML +<itemizedlist> + <listitem><para><command>yamlfmt</command></para></listitem> + <listitem><para><command>prettier</command></para></listitem> +</itemizedlist> +</para></listitem> + </itemizedlist> </para>
