File indexing completed on 2024-05-05 04:38:04

0001 /*
0002     SPDX-FileCopyrightText: 2012 Morten Danielsen Volden <mvolden2@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_OUTPUTFILTERINGSTRATEGIES_H
0008 #define KDEVPLATFORM_OUTPUTFILTERINGSTRATEGIES_H
0009 
0010 /**
0011  * @file outputfilteringstrategies.h
0012  *
0013  * This file contains Concrete strategies for filtering output
0014  * in KDevelop output model. I.e. classes that inherit from ifilterstrategy.
0015  * New filtering strategies should be added here
0016  */
0017 
0018 
0019 #include "ifilterstrategy.h"
0020 #include <outputview/outputviewexport.h>
0021 
0022 #include <QVector>
0023 #include <QUrl>
0024 #include <QScopedPointer>
0025 
0026 namespace KDevelop
0027 {
0028 class CompilerFilterStrategyPrivate;
0029 
0030 /**
0031  * This filter strategy is for not applying any filtering at all. Implementation of the
0032  * interface methods are basically noops
0033  **/
0034 class KDEVPLATFORMOUTPUTVIEW_EXPORT NoFilterStrategy : public IFilterStrategy
0035 {
0036 
0037 public:
0038     NoFilterStrategy();
0039 
0040     FilteredItem errorInLine(const QString& line) override;
0041 
0042     FilteredItem actionInLine(const QString& line) override;
0043 
0044 };
0045 
0046 /**
0047  * This filter strategy checks if a given line contains output
0048  * that is defined as an error (or an action) from a compiler.
0049  **/
0050 class KDEVPLATFORMOUTPUTVIEW_EXPORT CompilerFilterStrategy : public IFilterStrategy
0051 {
0052 
0053 public:
0054     explicit CompilerFilterStrategy(const QUrl& buildDir);
0055     ~CompilerFilterStrategy() override;
0056 
0057     FilteredItem errorInLine(const QString& line) override;
0058 
0059     FilteredItem actionInLine(const QString& line) override;
0060 
0061     QVector<QString> currentDirs() const;
0062 
0063 private:
0064     const QScopedPointer<class CompilerFilterStrategyPrivate> d_ptr;
0065     Q_DECLARE_PRIVATE(CompilerFilterStrategy)
0066 };
0067 
0068 /**
0069  * This filter strategy filters out errors (no actions) from Python and PHP scripts.
0070  **/
0071 class KDEVPLATFORMOUTPUTVIEW_EXPORT ScriptErrorFilterStrategy : public IFilterStrategy
0072 {
0073 
0074 public:
0075     ScriptErrorFilterStrategy();
0076 
0077     FilteredItem errorInLine(const QString& line) override;
0078 
0079     FilteredItem actionInLine(const QString& line) override;
0080 
0081 };
0082 
0083 /**
0084  * This filter strategy filters out errors (no actions) from runtime debug output of native applications
0085  *
0086  * This is especially useful for runtime output of Qt applications, for example lines such as:
0087  * "ASSERT: "errors().isEmpty()" in file /tmp/foo/bar.cpp", line 49"
0088  */
0089 class KDEVPLATFORMOUTPUTVIEW_EXPORT NativeAppErrorFilterStrategy : public IFilterStrategy
0090 {
0091 public:
0092     NativeAppErrorFilterStrategy();
0093 
0094     FilteredItem errorInLine(const QString& line) override;
0095     FilteredItem actionInLine(const QString& line) override;
0096 };
0097 
0098 /**
0099  * This filter strategy filters out errors (no actions) from Static code analysis tools (Cppcheck,)
0100  **/
0101 class KDEVPLATFORMOUTPUTVIEW_EXPORT StaticAnalysisFilterStrategy : public IFilterStrategy
0102 {
0103 
0104 public:
0105     StaticAnalysisFilterStrategy();
0106 
0107     FilteredItem errorInLine(const QString& line) override;
0108 
0109     FilteredItem actionInLine(const QString& line) override;
0110 
0111 };
0112 
0113 } // namespace KDevelop
0114 #endif // KDEVPLATFORM_OUTPUTFILTERINGSTRATEGIES_H
0115