diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-10-21 09:13:03 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-10-21 09:13:03 +0200 |
commit | bb9774de92dd2c8da85c5231ca5646b078cb42a3 (patch) | |
tree | e43470cf6f3a7c965b7dc8a349593dadd03ee65e /src/plugins/cppeditor/cpptoolsreuse.cpp | |
parent | f41bebc843a8b4ab1ab29562ba200b032b5ab5ac (diff) | |
parent | 5377253612801b2f92e0b55e40c3ce0dd2574b09 (diff) |
Merge remote-tracking branch 'origin/6.0'
Conflicts:
cmake/QtCreatorIDEBranding.cmake
qbs/modules/qtc/qtc.qbs
qtcreator_ide_branding.pri
Change-Id: If8baed5564470e550a0ba5c7720915217eec2412
Diffstat (limited to 'src/plugins/cppeditor/cpptoolsreuse.cpp')
-rw-r--r-- | src/plugins/cppeditor/cpptoolsreuse.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/plugins/cppeditor/cpptoolsreuse.cpp b/src/plugins/cppeditor/cpptoolsreuse.cpp index 15a1bea88a..04f679824a 100644 --- a/src/plugins/cppeditor/cpptoolsreuse.cpp +++ b/src/plugins/cppeditor/cpptoolsreuse.cpp @@ -39,11 +39,15 @@ #include <coreplugin/idocument.h> #include <coreplugin/messagemanager.h> #include <projectexplorer/session.h> +#include <texteditor/codeassist/assistinterface.h> #include <texteditor/textdocument.h> -#include <cplusplus/Overview.h> +#include <cplusplus/BackwardsScanner.h> #include <cplusplus/LookupContext.h> +#include <cplusplus/Overview.h> +#include <cplusplus/SimpleLexer.h> #include <utils/algorithm.h> +#include <utils/porting.h> #include <utils/textutils.h> #include <utils/qtcassert.h> @@ -300,6 +304,40 @@ const Macro *findCanonicalMacro(const QTextCursor &cursor, Document::Ptr documen return nullptr; } +bool isInCommentOrString(const TextEditor::AssistInterface *interface, + CPlusPlus::LanguageFeatures features) +{ + QTextCursor tc(interface->textDocument()); + tc.setPosition(interface->position()); + + SimpleLexer tokenize; + features.qtMocRunEnabled = true; + tokenize.setLanguageFeatures(features); + tokenize.setSkipComments(false); + const Tokens &tokens = tokenize(tc.block().text(), + BackwardsScanner::previousBlockState(tc.block())); + const int tokenIdx = SimpleLexer::tokenBefore(tokens, qMax(0, tc.positionInBlock() - 1)); + const Token tk = (tokenIdx == -1) ? Token() : tokens.at(tokenIdx); + + if (tk.isComment()) + return true; + if (!tk.isLiteral()) + return false; + if (tokens.size() == 3 && tokens.at(0).kind() == T_POUND + && tokens.at(1).kind() == T_IDENTIFIER) { + const QString &line = tc.block().text(); + const Token &idToken = tokens.at(1); + QStringView identifier = Utils::midView(line, idToken.utf16charsBegin(), + idToken.utf16chars()); + if (identifier == QLatin1String("include") + || identifier == QLatin1String("include_next") + || (features.objCEnabled && identifier == QLatin1String("import"))) { + return false; + } + } + return true; +} + CppCodeModelSettings *codeModelSettings() { return Internal::CppEditorPlugin::instance()->codeModelSettings(); |