forked from qt-creator/qt-creator
CppEditor: Squash three copies of the "is in comment or string" check
Change-Id: Id6c4e35ae2d3b3031e5c95ea04f5b971bef58389 Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -858,38 +858,8 @@ bool InternalCppCompletionAssistProcessor::accepts() const
|
||||
if (pos - startOfName >= TextEditorSettings::completionSettings().m_characterThreshold) {
|
||||
const QChar firstCharacter = m_interface->characterAt(startOfName);
|
||||
if (isValidFirstIdentifierChar(firstCharacter)) {
|
||||
// Finally check that we're not inside a comment or string (code copied from startOfOperator)
|
||||
QTextCursor tc(m_interface->textDocument());
|
||||
tc.setPosition(pos);
|
||||
|
||||
SimpleLexer tokenize;
|
||||
tokenize.setLanguageFeatures(m_interface->languageFeatures());
|
||||
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() && !tk.isLiteral()) {
|
||||
return true;
|
||||
} else if (tk.isLiteral()
|
||||
&& 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 = idToken.utf16charsEnd() > line.size()
|
||||
? QStringView(line).mid(
|
||||
idToken.utf16charsBegin())
|
||||
: QStringView(line)
|
||||
.mid(idToken.utf16charsBegin(),
|
||||
idToken.utf16chars());
|
||||
if (identifier == QLatin1String("include")
|
||||
|| identifier == QLatin1String("include_next")
|
||||
|| (m_interface->languageFeatures().objCEnabled && identifier == QLatin1String("import"))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return !isInCommentOrString(m_interface.data(),
|
||||
m_interface->languageFeatures());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user