Clang expects these to lie in "../lib/clang" relative to the clang
executable.
Change-Id: I216860876591dca1fd728e4b1e79b4b07c965620
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
The m_parserFuture.cancel() in ~BuiltinEditorDocumentProcessor() did not
cancel anything. Thus, closing a document while the parser was running
led to a blocking UI thread.
Now it cancels at the next include directive it encounters.
Change-Id: I092fddbbd747e0bc95265b6e9b4fcc26b3f76cb3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
The order is 0 by default and thus the snippet items were at the very
top, e.g.:
enum EnumType { EnumValue };
void f()
{
EnumType et = // Complete here and see snippet items at top
}
Change-Id: I70a160d102b91a2589972354c50aa5f0b29323e8
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Having *some* limit is reasonable since sorting happens in the UI thread
and given enough includes/symbols it will freeze sooner or later.
The strategy is now: Stop sorting at all if there are more than 30.000
completion items to process.
The limit is a guess made on the following measurements. The goal is to
keep below 100ms.
test | items | before | now
-----+-----------------------
Cpp1 | 6394 | 172ms | 15ms |
Win1 | 44739 | 125ms | 56ms |
Qtc1 | 9648, | 16ms | 15ms |
Qtc2 | 10210 | 20ms | 16ms |
Qtc3 | 51044 | 141ms | 63ms |
Qt1 | 62953 | 172ms | 78ms |
Windows.h alone pulls in about 44.000 completion items.
Used test procedure
-------------------
For each test below, do:
1. Start Qt Creator in release mode
2. Open/create the project with a MSVC2015 Kit
3. Open the mentioned file
4. Strg+Space in the mentioned function
Measured with a timer in IpcReceiver::codeCompleted.
Test projects:
Cpp1: stdc++11-includes.pro, main.cpp, main()
Win1: Create project from wizard, *.cpp file including windows.h, completion
in some added function
Qtc1: qtcreator.pro, texteditor.cpp, BaseTextEditor::duplicate()
Qtc2: qtcreator.pro, fakevimhandler.cpp, FakeVimHandler::jumpToLocalMark
Qtc3: qtcreator.pro, botan.cpp, version_string()
Qt1: qt-essential-includes.pro, main.cpp, main()
Change-Id: I6fbd65d14f6086f289be7dd6c24385996e4bde83
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
We assume that libclang does not return any duplicates, at least we
never noticed any so far. For the concrete test below no duplicates were
removed.
Function overloads are not problematic because they are folded into one
ClangAssistProposalItem (addOverload()).
To the completion items from libclang we add the Qt Creator snippets as
items. Those might have the same text in the completion list view, but
their icon is different (e.g. consider the keyword completion "class"
and the Qt Creator snippet "class"), thus the user can still tell them
apart.
Test:
1. Open src/plugins/clangstaticanalyzer/unit-tests/qt-essential-includes.pro
2. Open main.cpp
3. Complete in the main function
Measured with a timer in IpcReceiver::codeCompleted.
On Linux, for 20637 completion items:
Before: 74ms (avg)
Now: 66ms (avg)
Gain: 11%
Change-Id: I524eaa09f8d9e07c78dc9efcc77f7e021c6f37f7
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
The existing solution with the special-style horizontal
kit selector comes from a time when there was typically
one, at most four targets. Today's setup can easily
reach half a dozen targets with several toolchain versions
each and can't be sensibly handled with the overflowing
horizontal bar.
This here replaces the horizontal kit selector bar as
well as the top level project "tab bar" with a normal
tree view. All targets are visible (but possibly disabled)
at once, and can be enabled/disabled using the context
menu on the tree items.
Change-Id: I1ce7401ca96109bf34bc8c0ae19d265e5845aa88
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
...on the plugin side by removing a left over calculation. We construct
the detail in the virtual ClangAssistProposalItem::detail(), that is, on
demand.
Test:
1. Open src/plugins/clangstaticanalyzer/unit-tests/qt-essential-includes.pro
2. Open main.cpp
3. Complete in the main function
Measured with a timer in IpcReceiver::codeCompleted.
On Linux, for 20637 completion items:
Before: 119ms (avg)
Now: 81ms (avg)
Gain: 32%
Change-Id: I9617cb9651a8367c31cd40e965175b5b37e10730
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
The messages
RequestDiagnosticsMessage
RequestHighlightingMessage
and
DiagnosticsChangedMessage
HighlightingChangedMessage
are always send/received together, so merge them into
RequestDocumentAnnotationsMessage
DocumentAnnotationsChangedMessage
Change-Id: I6a0b6281ed1e6efe6cb18386afe99b1d1fb58abf
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@theqtcompany.com>
Might fix a fail on loaded test machines.
Change-Id: Ieb9e8426f760e2257ececa0b53c564d68992c3fa
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
We want to reuse the connection client in other plugins. This is the first
step, the next step is refactoring the IPC mechanismn and move it up to
the IpcServer- and IpcClientInterface.
Change-Id: I6eb6db1e9bc18232c8df350a6303afd2edc68da8
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
The connection client can block main thread at start up. This patch is
removing the wait functions and using signals instead.
Change-Id: I847c98b095752f6a875c0365bc27361bc5bdd051
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
The fixits have own ranges/locations and thus might address more than
one file.
Change-Id: I5ee59944bef588e763a91f054a60823593373a0e
Reviewed-by: David Schulz <david.schulz@qt.io>
libclang 3.8 seems to be sensitive to file paths separators [1]. On Windows,
this led to not updated document annotations and/or crashes after reparsing.
When passing file paths to libclang, convert to native separators.
When getting file paths from libclang, convert back.
This handles:
* main file path
* file paths of the unsaved files
* -I<DIR> arguments, the resource path (for builtins) and the paths to the
wrapped qt headers
* included header files from libclang
* source locations from libclang
Also, minimize the conversion in SourceLocation to a minimum by making
filePath() lazy.
[1] https://llvm.org/bugs/show_bug.cgi?id=28381
Change-Id: If5866f34a6fdc6b34b16c022d3988e8e6eae2a0a
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
We want to share more functionality of the IPC mechanism and for what we
need more interface classes. But we use this names already for the
ClangCodeModel implementation. So we rename the them to ClangCodeModel*.
Change-Id: Ie320e0d3b993586a9bcc6a5aa0d32427af41202e
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
...when showing the refactoring marker and generating the quick fix
operations.
Opening main.cpp
main.cpp:
#include "file.h"
void f(char *s) { foo(s); }
file.h:
// significant line 1
// significant line 2
// significant line 3
bool foo(int fd);
led to
SOFT ASSERT: "textBlock.isValid()" in file
clangdiagnosticmanager.cpp, line 205
and a misbehavior when applying the fixit from the tooltip.
We take the line of a diagnostic to display the fixit marker if it has
any fixits. But the (child) diagnostic might be issued for an other file
(that's what happening here), so better take the line of the location
where the fixit is meant to be applied.
Same applies for generation of the quick fix entries.
Change-Id: I48d38420b285d2d2f86e3faa2319513aa8b47848
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
If there are no completion items, do not add snippets since these will
otherwise pop-up at undesired positions, e.g. when:
1) Typing float/doubles: 0.
2) Typing file suffix in include directives: #include "stdio.
Task-number: QTCREATORBUG-16188
Change-Id: Ie1c29826dc62dc447b2ff57b0c5537eb9d9511ef
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This means you can skip automatically inserted characters as long as you
don't explicitly move the text cursor and the editor doesn't lose the
focus. This will be visualized by highlighting the automatically
inserted character as long as you can perform the skipping.
This will reduce unexpected skipping in the case a cursor was explicitly
placed before an closing brace and a closing brace is typed.
Change-Id: I28e29e79ba10c9c48e8bc8817405fea630cca9bd
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This is The Right Way to detect libclang. Using a Probe will also
slightly improve performance in qbs 1.6 due to the result caching.
Change-Id: I063a8d108d02b620dda2df75dd8c014c84f27ec7
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
The size of the array is fixed so we can simply use the memory patter as
a hash value.
Change-Id: If86a58b111a07b2bd9cecc12a03d74b93a914159
Task-number: QTCREATORBUG-16419
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
The qtc module gathers properties that used to live in the top-level
project file. This is the first step towards making it possible to build
plugins against an installed Qt Creator ("out of source build").
Change-Id: Ia1514cc9c888e80be01b308e908de48980fcbdb8
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
...that ocurred for e.g. "foo (<COMPLETE HERE>".
We did not handle the following cases:
1) white space after the function name
2) nothing before parenthesis
Change-Id: If6aedd2cc938df30516e13a860d07d7a509633ae
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
For some reason, clang 3.8.0 on Windows does not enable exceptions anymore,
which leads to parse errors in MSVC headers (reported upstream [1]).
With this change, we can finally parse main/mainwindow.cpp of a Qt Widgets
Application for a MSVC2015 Kit and libclang 3.8.0 without any error.
[1] https://llvm.org/bugs/show_bug.cgi?id=27324
Change-Id: I532ad4852a06318baf083d363378bc577b3c4309
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
This applies the following change for the clang code model, too.
commit d13d179524
Clang Static Analyzer: Workaround analyzing MSVC2015 projects with clang 3.8.0 II
Change-Id: Ia229d7e8b24c2e1c0a83d9a53c623ea1f79c4a06
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Infer the version from the _MSC_FULL_VER macro, so it cannot get out of sync
with that.
Adapt the analyzer to do the same.
Based on
commit daf08d8702
Clang Static Analyzer: Workaround analyzing MSVC2015 projects with clang 3.8.0
Change-Id: I9d34abdbe2c83fe271eadd8d051caad43aca6772
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
As for the analyzer, this makes us independent of the default triple and will
most likely reduce the maintenance - e.g. the target implies certain internal
command line arguments, we will profit from added ones.
This fixes parsing of mingw headers with the clang code model.
Change-Id: I722b981125a80fac5f62a7af40a83ecdd7bbf811
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
This avoids multiple instatiations and reloading of the same image files.
Change-Id: I4d0bb955e23c1cb817671c25bff4e74fb7b3d0f4
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
There are two versions of startOfOperator:
* InternalCppCompletionAssistProcessor::startOfOperator
* ClangCompletionAssistProcessor::startOfOperator
The latter started as a copy of the former, but the former got some bug
fixes in the meantime. Adjust both versions to each other, so it's easy
to diff them and to extract the duplication in a follow-up change.
Change-Id: Icf48386bf1ad0fa473bec476c5412be9b1890139
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
There are three cases that must be handled:
1. Completion in C++ style comment
2. Completion in first line of a C style comment
3. Completion in non-first line of a C style comment
This change fixes case 1 + 2. Case 3 will be addressed in a follow-up
change, same goes for the duplication.
Task-number: QTCREATORBUG-15143
Change-Id: I449711f965ddcbbe6158870a8a5ae33218e0d238
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
We are adding declaration detection for function to the highligher on
user request. Other declaration will follow in separate patches.
Task-number: QTCREATORBUG-15564
Change-Id: I54e97c26425f8d6e9854547d50a9ac8fa076b4e8
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
A warning configuration is a list of command line (warning) options for
libclang. Three non-editable built-in configurations are provided by
default. The user can copy a configuration to customize it.
This is still a global setting and it changes take effect after
re-opening a document. Both issues will be addressed in follow-up
changes.
Change-Id: I86667d7dc39ad31b88666454220e6da563797740
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
We already had this workarounded, but it got lost in the refactorings.
Task-number: QTCREATORBUG-12067
Change-Id: Ie01f9d41f25d17d1b595204748634bc87ef44378
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>