Clang: Workaround completion for make_unique/shared

Change unsaved file to provide constructor overloads
for std::make_unique, std::make_shared and
QSharedPointer::create

Example:
// Provide Foo constructor signatures at <Cursor>
std::make_unique<Foo>(<Cursor>

Task-number: QTCREATORBUG-18615
Change-Id: I87dd17085adf99ee498db969a3cdda5ebd973476
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2017-08-10 11:05:48 +02:00
parent b5379d599f
commit 79e94ddae8
9 changed files with 190 additions and 10 deletions

View File

@@ -36,12 +36,15 @@ namespace ClangBackEnd {
static CompleteCodeJob::AsyncResult runAsyncHelper(const TranslationUnit &translationUnit,
UnsavedFiles unsavedFiles,
quint32 line,
quint32 column)
quint32 column,
qint32 funcNameStartLine,
qint32 funcNameStartColumn)
{
TIME_SCOPE_DURATION("CompleteCodeJobRunner");
const TranslationUnit::CodeCompletionResult results
= translationUnit.complete(unsavedFiles, line, column);
= translationUnit.complete(unsavedFiles, line, column,
funcNameStartLine, funcNameStartColumn);
CompleteCodeJob::AsyncResult asyncResult;
asyncResult.completions = results.completions;
@@ -63,8 +66,12 @@ IAsyncJob::AsyncPrepareResult CompleteCodeJob::prepareAsyncRun()
const UnsavedFiles unsavedFiles = *context().unsavedFiles;
const quint32 line = jobRequest.line;
const quint32 column = jobRequest.column;
setRunner([translationUnit, unsavedFiles, line, column]() {
return runAsyncHelper(translationUnit, unsavedFiles, line, column);
const qint32 funcNameStartLine = jobRequest.funcNameStartLine;
const qint32 funcNameStartColumn = jobRequest.funcNameStartColumn;
setRunner([translationUnit, unsavedFiles, line, column,
funcNameStartLine, funcNameStartColumn]() {
return runAsyncHelper(translationUnit, unsavedFiles, line, column,
funcNameStartLine, funcNameStartColumn);
});
return AsyncPrepareResult{translationUnit.id()};