Clang: Workaround dot detection for arrow correction

...by explicitly checking for the dot in the source.

Task-number: QTCREATORBUG-15654
Change-Id: I4172e88a7fbb3015ef391daf13ded1f0002aab9c
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2016-01-28 18:43:14 +01:00
parent da27ea4d42
commit 57877cc14d
7 changed files with 73 additions and 1 deletions

View File

@@ -68,7 +68,7 @@ CodeCompletions CodeCompleter::complete(uint line, uint column)
translationUnit.cxUnsavedFiles(),
translationUnit.unsavedFilesCount());
if (results.hasNoResultsForDotCompletion())
if (results.hasNoResultsForDotCompletion() && hasDotAt(line, column - 1))
results = completeWithArrowInsteadOfDot(line, column);
return toCodeCompletions(results);
@@ -95,6 +95,14 @@ ClangCodeCompleteResults CodeCompleter::complete(uint line,
options);
}
bool CodeCompleter::hasDotAt(uint line, uint column) const
{
const UnsavedFile &unsavedFile = translationUnit.unsavedFile();
const SourceLocation location = translationUnit.sourceLocationAtWithoutReparsing(line, column);
return unsavedFile.hasCharacterAt(location.offset(), '.');
}
ClangCodeCompleteResults CodeCompleter::completeWithArrowInsteadOfDot(uint line, uint column)
{
ClangCodeCompleteResults results;