File indexing completed on 2024-05-12 04:39:08
0001 /* 0002 SPDX-FileCopyrightText: 2014 Milian Wolff <mail@milianw.de> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #ifndef CLANGCODECOMPLETIONCONTEXT_H 0008 #define CLANGCODECOMPLETIONCONTEXT_H 0009 0010 #include "duchain/parsesession.h" 0011 0012 #include <language/codecompletion/codecompletioncontext.h> 0013 0014 #include <clang-c/Index.h> 0015 0016 #include <memory> 0017 0018 #include "completionhelper.h" 0019 #include "clangprivateexport.h" 0020 0021 class KDEVCLANGPRIVATE_EXPORT ClangCodeCompletionContext : public KDevelop::CodeCompletionContext 0022 { 0023 public: 0024 enum ContextFilter 0025 { 0026 NoFilter = 0, ///< Show everything 0027 NoBuiltins = 1 << 0, ///< Hide builtin completion items 0028 NoMacros = 1 << 1, ///< Hide macro completion items 0029 NoDeclarations = 1 << 2, ///< Hide declaration completion items 0030 NoClangCompletion = NoBuiltins | NoMacros | NoDeclarations 0031 }; 0032 Q_DECLARE_FLAGS(ContextFilters, ContextFilter) 0033 0034 ClangCodeCompletionContext(const KDevelop::DUContextPointer& context, 0035 const ParseSessionData::Ptr& sessionData, 0036 const QUrl& url, 0037 const KTextEditor::Cursor& position, 0038 const QString& text, 0039 const QString& followingText = {}); 0040 ~ClangCodeCompletionContext() override; 0041 0042 QList<KDevelop::CompletionTreeItemPointer> completionItems(bool& abort, bool fullCompletion = true) override; 0043 0044 QList<KDevelop::CompletionTreeElementPointer> ungroupedElements() override; 0045 0046 ContextFilters filters() const; 0047 void setFilters(const ContextFilters& filters); 0048 0049 private: 0050 void addOverwritableItems(); 0051 void addImplementationHelperItems(); 0052 0053 /// Creates the group named @p name and adds it to m_ungrouped if items @p items is not empty 0054 void eventuallyAddGroup(const QString& name, int priority, const QList<KDevelop::CompletionTreeItemPointer>& items); 0055 0056 /// Returns whether the we are at a valid completion-position 0057 bool isValidPosition(CXTranslationUnit unit, CXFile file) const; 0058 0059 std::unique_ptr<CXCodeCompleteResults, void(*)(CXCodeCompleteResults*)> m_results; 0060 QList<KDevelop::CompletionTreeElementPointer> m_ungrouped; 0061 CompletionHelper m_completionHelper; 0062 ParseSessionData::Ptr m_parseSessionData; 0063 ContextFilters m_filters = NoFilter; 0064 }; 0065 0066 #endif // CLANGCODECOMPLETIONCONTEXT_H