summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp26
-rw-r--r--src/plugins/clangcodemodel/activationsequencecontextprocessor.h7
-rw-r--r--src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp29
-rw-r--r--src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h3
4 files changed, 28 insertions, 37 deletions
diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp
index ce9c5f0471..1b03f0e5b7 100644
--- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp
+++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.cpp
@@ -97,7 +97,7 @@ void ActivationSequenceContextProcessor::process()
void ActivationSequenceContextProcessor::processActivationSequence()
{
- const int nonSpacePosition = findStartOfNonSpaceChar(m_startOfNamePosition);
+ const int nonSpacePosition = skipPrecedingWhitespace(m_assistInterface, m_startOfNamePosition);
const auto activationSequence = m_assistInterface->textAt(nonSpacePosition - 3, 3);
ActivationSequenceProcessor activationSequenceProcessor(activationSequence,
nonSpacePosition,
@@ -228,28 +228,40 @@ void ActivationSequenceContextProcessor::resetPositionsForEOFCompletionKind()
m_operatorStartPosition = m_positionInDocument;
}
-int ActivationSequenceContextProcessor::findStartOfNonSpaceChar(int startPosition)
+int ActivationSequenceContextProcessor::skipPrecedingWhitespace(
+ const TextEditor::AssistInterface *assistInterface,
+ int startPosition)
{
int position = startPosition;
- while (m_assistInterface->characterAt(position - 1).isSpace())
+ while (assistInterface->characterAt(position - 1).isSpace())
--position;
return position;
}
-int ActivationSequenceContextProcessor::findStartOfName(int startPosition)
+static bool isValidIdentifierChar(const QChar &character)
+{
+ return character.isLetterOrNumber()
+ || character == QLatin1Char('_')
+ || character.isHighSurrogate()
+ || character.isLowSurrogate();
+}
+
+int ActivationSequenceContextProcessor::findStartOfName(
+ const TextEditor::AssistInterface *assistInterface,
+ int startPosition)
{
int position = startPosition;
QChar character;
do {
- character = m_assistInterface->characterAt(--position);
- } while (character.isLetterOrNumber() || character == QLatin1Char('_'));
+ character = assistInterface->characterAt(--position);
+ } while (isValidIdentifierChar(character));
return position + 1;
}
void ActivationSequenceContextProcessor::goBackToStartOfName()
{
- m_startOfNamePosition = findStartOfName(m_positionInDocument);
+ m_startOfNamePosition = findStartOfName(m_assistInterface, m_positionInDocument);
if (m_startOfNamePosition != m_positionInDocument)
m_textCursor.setPosition(m_startOfNamePosition);
diff --git a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h
index d85a44090e..f63bfa2c5a 100644
--- a/src/plugins/clangcodemodel/activationsequencecontextprocessor.h
+++ b/src/plugins/clangcodemodel/activationsequencecontextprocessor.h
@@ -55,10 +55,13 @@ public:
const QTextCursor &textCursor_forTestOnly() const;
+ static int findStartOfName(const TextEditor::AssistInterface *assistInterface,
+ int startPosition);
+ static int skipPrecedingWhitespace(const TextEditor::AssistInterface *assistInterface,
+ int startPosition);
+
protected:
void process();
- int findStartOfNonSpaceChar(int startPosition);
- int findStartOfName(int startPosition);
void goBackToStartOfName();
void processActivationSequence();
void processStringLiteral();
diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp
index 63fd840878..eaa2b3d90a 100644
--- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp
+++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.cpp
@@ -100,13 +100,15 @@ void ClangCompletionContextAnalyzer::analyze()
ClangCompletionContextAnalyzer::FunctionInfo
ClangCompletionContextAnalyzer::analyzeFunctionCall(int endOfOperator) const
{
- int index = skipPrecedingWhitespace(endOfOperator);
+ int index = ActivationSequenceContextProcessor::skipPrecedingWhitespace(m_interface,
+ endOfOperator);
QTextCursor textCursor(m_interface->textDocument());
textCursor.setPosition(index);
ExpressionUnderCursor euc(m_languageFeatures);
index = euc.startOfFunctionCall(textCursor);
- const int functionNameStart = findStartOfName(index);
+ const int functionNameStart = ActivationSequenceContextProcessor::findStartOfName(m_interface,
+ index);
QTextCursor textCursor2(m_interface->textDocument());
textCursor2.setPosition(functionNameStart);
@@ -118,29 +120,6 @@ ClangCompletionContextAnalyzer::analyzeFunctionCall(int endOfOperator) const
return info;
}
-int ClangCompletionContextAnalyzer::findStartOfName(int position) const
-{
- if (position == -1)
- position = m_interface->position();
- QChar chr;
-
- do {
- chr = m_interface->characterAt(--position);
- // TODO: Check also chr.isHighSurrogate() / ch.isLowSurrogate()?
- // See also CppTools::isValidFirstIdentifierChar
- } while (chr.isLetterOrNumber() || chr == QLatin1Char('_'));
-
- return position + 1;
-}
-
-int ClangCompletionContextAnalyzer::skipPrecedingWhitespace(int position) const
-{
- QTC_ASSERT(position >= 0, return position);
- while (m_interface->characterAt(position - 1).isSpace())
- --position;
- return position;
-}
-
void ClangCompletionContextAnalyzer::setActionAndClangPosition(CompletionAction action,
int position)
{
diff --git a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h
index 2234adf604..3df4041675 100644
--- a/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h
+++ b/src/plugins/clangcodemodel/clangcompletioncontextanalyzer.h
@@ -72,9 +72,6 @@ private:
struct FunctionInfo { int functionNamePosition; QString functionName; };
FunctionInfo analyzeFunctionCall(int endOfExpression) const;
- int findStartOfName(int position = -1) const;
- int skipPrecedingWhitespace(int position) const;
-
void setActionAndClangPosition(CompletionAction action, int position);
void setAction(CompletionAction action);