File indexing completed on 2024-06-09 05:44:24
0001 /* 0002 SPDX-FileCopyrightText: 2022 Waqar Ahmed <waqar.17a@gmail.com> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 #pragma once 0006 0007 #include <KTextEditor/Cursor> 0008 #include <KTextEditor/MainWindow> 0009 #include <KTextEditor/Plugin> 0010 #include <KXMLGUIClient> 0011 0012 #include <QProcess> 0013 #include <diagnostics/diagnosticview.h> 0014 0015 #include <QPointer> 0016 #include <QVariant> 0017 0018 class ESLintPlugin final : public KTextEditor::Plugin 0019 { 0020 Q_OBJECT 0021 public: 0022 explicit ESLintPlugin(QObject *parent = nullptr, const QVariantList & = QVariantList()); 0023 0024 QObject *createView(KTextEditor::MainWindow *mainWindow) override; 0025 }; 0026 0027 struct DiagnosticWithFix { 0028 Diagnostic diag; 0029 struct Fix { 0030 int rangeStart = 0; 0031 int rangeEnd = 0; 0032 QString text; 0033 } fix; 0034 }; 0035 0036 class ESLintPluginView final : public QObject, public KXMLGUIClient 0037 { 0038 Q_OBJECT 0039 0040 public: 0041 explicit ESLintPluginView(KTextEditor::MainWindow *mainwindow); 0042 ~ESLintPluginView(); 0043 0044 private: 0045 void onActiveViewChanged(KTextEditor::View *); 0046 void onSaved(KTextEditor::Document *d); 0047 void onReadyRead(); 0048 void onError(); 0049 void onFixesRequested(const QUrl &, const Diagnostic &, const QVariant &); 0050 void fixDiagnostic(const QUrl &url, const DiagnosticWithFix::Fix &fix); 0051 0052 QPointer<KTextEditor::Document> m_activeDoc; 0053 KTextEditor::MainWindow *m_mainWindow; 0054 DiagnosticsProvider m_provider; 0055 QProcess m_eslintProcess; 0056 std::vector<DiagnosticWithFix> m_diagsWithFix; 0057 };