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 };