Commit Graph

66 Commits

Author SHA1 Message Date
Nikolai Kosjar
92230d57d6 Clang: Ensure using correct translation unit flags for clang >= 7.0
...otherwise things will get slower.

Change-Id: Ifc01c31a2bb50a277a38ede5dbe58583d15010f5
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-13 09:57:11 +00:00
Nikolai Kosjar
bcd1158b33 Clang: Check consistently for clang 7.0
Change-Id: I8abccb7ce2bd73ce4c991b2a5062f459513ea624
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-13 09:57:02 +00:00
Nikolai Kosjar
7ff3846482 Clang: Remove unused class FollowSymbolData
Change-Id: If29f69f969127abcd9fdce5ff7647665c2717041
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-08 08:24:56 +00:00
Nikolai Kosjar
cbd4d05423 Clang: Fix processing documents if multiple are opened at once
Reproducable with
 1. $ ./qtcreator a.cpp b.cpp
 2. Switch to a.cpp => no highlighting

Because ClangEditorDocumentProcessor does asynchronous processing, the
backend might receive a DocumentsOpenedMessage where the document is not
the current editor (happens for a.cpp in the example). When switching to
that document, the initial jobs were not processed as the document was
not dirty.

Address this case by also checking for documents that have a revision of
1 and are not dirty. Unify adding the annotations jobs to ensure that
not more than needed are run.

Change-Id: I14030260842f97d58280235e763c8d7490705f8d
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-08 06:32:40 +00:00
Nikolai Kosjar
89d6a36bc6 Clang: Disable internal threads in libclang
We already run all operations in threads to avoid blocking, there is no
need to start more threads within libclang. Before this change, a
reparse would trigger 3 threads to start:
  1. clangbackend: Utils::runAsync() for the job
  2. libclang-internal: thread for reparse
  3. libclang-internal: thread for annotating tokens (highlighting)

Ensure that we use the same stack size for our threads as libclang was
doing internally. C++ parsers usually have higher stack size
requirements.

Change-Id: I2f67602ddfbf77ea2c69144b56acf64ba08041f6
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-05 08:17:40 +00:00
Nikolai Kosjar
f01fbcb789 Clang: Clean up some IPC names
This is long overdue since some names were simply wrong and/or
misleading. Also, some of the old names were long enough to almost get
crazy.

The renaming starts from ClangCodeModelServerInterface and
ClangCodeModelClientInterface and affects usages and related functions.

For the ClangCodeModelServerInterface, categorize the messages in
 - messages that require a response (request*)
 - notification messages (the remaining ones)

Change-Id: I5342ed8e0d87404ee72f3c3766fd8ef7505defb1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-04 09:54:01 +00:00
Ivan Donchevskii
4e4bd4909a Clang: Use follow symbol result from clang when global fails
When built-in code model fails to follow symbol under cursor
fall back to the clang result even if it only follows
to the decalration.

Change-Id: I22d8c5fee6ab7594b1d1b7ce8104414db28383c7
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-06-04 08:48:33 +00:00
Nikolai Kosjar
234980699d Clang: Fix running UpdateExtraDocumentAnnotations job on outdated document
Prior to this change, the UpdateExtraDocumentAnnotations job (e.g.
providing the symbol outline information) was running concurrently to
UpdateDocumentAnnotations job on the outdated translation unit. Now it
runs on the same translation unit after the document was updated.

Change-Id: I4d84102423592d8a1310c1ac0ebbce9bd76a3714
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-06-01 08:30:49 +00:00
Nikolai Kosjar
69dec8a9f8 Clang: Create preamble on first parse
...now that parsing and creating the preamble is faster due to the
skipped function bodies.

As a consequence, we can remove all the extra jobs that were needed to
get an initial AST faster.

Change-Id: I79a66b8a0e8a180850af6daf353d9a679089bbb1
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-05-24 12:33:55 +00:00
Nikolai Kosjar
8fa15892a4 Clang: Skip parsing function bodies in the preamble
With this, we get

 * Significantly faster reparsing (~ 50% faster here for texteditor.cpp)
 * Less crashes due to less code to handle
 * Reduced memory consumption and size of the preamble on disk due to
   smaller AST

On the downside, we don't get anymore diagnostics for invalid template
instantiations, e.g:

 -- header.h --

  template<class T>
  bool cmp(T t1, T t2)
  { return t1 < t2; } // Function body is not parsed.

 -- main.cpp --

  #include "header.h"
  struct Foo {};
  void example(Foo foo)
  {
      cmp(foo, foo);
  }

The diagnostic "error: invalid operands to binary expression ('Foo' and
'Foo')" is not reported anymore. It will be noticed at build time.

Change-Id: I9b37be349f99af88b4786380ca1d8e6aff39b123
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-05-24 12:33:47 +00:00
Nikolai Kosjar
319daa2612 Clang: Require LLVM/Clang >= 6.0.0
Adapt versions and tests, remove code assuming clang < 6.0.

Switch also to our custom repositories instead of dealing with patch
files.

LLVM/Clang 6 was released on 09 Mar 2018.

Task-number: QTCREATORBUG-18535
Task-number: QTCREATORBUG-18552
Change-Id: I0ec2c2f56265e161ae7cbb5b03e7b8a182ba6cc6
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-05-17 12:46:37 +00:00
Orgad Shaneh
bd91d938c4 Clang: Fix compiler warnings
MSVC64 reported implicit size_t to int/unsigned conversion.

Change-Id: I253626dd25f9f3eb67b8fffb26006b619e826034
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-05-08 06:31:28 +00:00
Hugo Holgersson
86aab16ea4 TextEditor: Highlight punctuators as Text
This change limits the set of tokens that fall under
Token::isOperator(). That allows cpphighlighter.cpp to
distinguish operator tokens from punctuator tokens
(without changing any logic in cpphighlighter.cpp).

This change moves punctuators from "Operator"
to the "Text" style category where they belong.
Punctuators are not operators. Punctuators are
dumb text tokens.

Why don't we let the clang backend alone separate
these tokens for us?

1. Clang is slow on big files. Sometimes the
   highlighting dictated by clang is painted _seconds_
   after cpphighlighter.cpp runs. CppHighlighter is way
   faster so we use it to "prepaint" code while clang is
   busy in the background.

2. Secondly, clang cannot yet handle all operator types.
   In particular, none if its "operator cursors"
     CXCursor_UnaryOperator:
     CXCursor_BinaryOperator:
     CXCursor_CompoundAssignOperator:
     CXCursor_ConditionalOperator:
   includes the -> and . operators.
   We still need CppHighlighter to paint those tokens.

However, once clang has finished processing the file some
operator tokens will be repainted. We need clang to get
all operators' semantics. In particular, we need clang to
tell us if < is a "smaller than"-operator or part of a
template parameter like set<int>.

Task-number: QTCREATORBUG-19659
Change-Id: I952cb58f7c79134b3281e2a8221425cc1d0ad263
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-05-03 13:43:16 +00:00
Ivan Donchevskii
ce032552c0 Clang: Support old-style SIGNAL/SLOT macro
Color types and enable Ctrl+click for the functions
and types inside SIGNAL/SLOT macros.

Change-Id: Ic1c0b7372fe9a73c5607b1973d75a6656c75ef0e
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-05-03 13:34:21 +00:00
Hugo Holgersson
142ae0cdf9 Clang: Add semantic C++ operator-token styling
We used to style overloaded operators in the same way
as C++'s built-in operators. There was no way to tell
if a + token would call a operator+() function or not.

Now, if an operator is overloaded (redefined),
we give it the "Overloaded Operator"-mixin so users
can style it differently.

Note: Calls to overloaded 'new' and 'delete' are not
highlighted by "Overloaded Operator". This is because
clang today always maps these to CXCursor_CXXNewExpr
and CXCursor_CXXDeleteExpr with cursor.spelling == ""
(empty string). So there is no (?) quick way for us
to tell if a new/delete-token was overloaded or not.

After follow-ups, follow symbol will work for operator
overload usages in current translation unit.
Commit is appended by Ivan Donchevskii.

Task-number: QTCREATORBUG-19659
Change-Id: I157855d482a61ad2059642a1ee982089fcb7d312
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-04-30 15:10:12 +00:00
Ivan Donchevskii
7b2774dea1 Clang: Use current TranslationUnit follow symbol based on clang code model
It might be quite a safe replacement which can fix builtin
code model issues.

If clang code model fails to follow symbol or does not find
a definition when it's required we fall back to the built-in
code model to proceed with project-wide follow symbol.

To make it almost a full replacement tweak include paths underline
on cursor hover to match what we have in built-in code model.

SIGNAL/SLOTS macros are not yet supported but can be handled
in follow up patch.

Task-number: QTCREATORBUG-19477
Change-Id: Id1611511d661a8aaf3e93502b4e03e1792c7c1d3
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-04-26 10:27:42 +00:00
Robert Loehning
6278212346 Clang: Initialize members
Change-Id: I251c49a22f54e1d3cc8a9c0b1e6c30f2926d90a6
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-04-23 15:54:53 +00:00
Ivan Donchevskii
ef660d8bd0 Clang: Simplify name and type in FullTokenInfo for functions
Take Cursor displayName instead of token name.
From now on type spelling can serve the return type
role for functions because together with 'token' member
they form the full type.

Change-Id: Ic8eec533f4a11458f99f070b6a6aa80714097b4d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-04-23 07:59:40 +00:00
Eike Ziller
428fcb476b Merge remote-tracking branch 'origin/4.6'
Conflicts:
	src/libs/utils/settingsaccessor.cpp
	src/plugins/autotest/autotestplugin.cpp
	src/plugins/git/gitclient.cpp
	src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
	src/plugins/qbsprojectmanager/qbsrunconfiguration.h

Change-Id: I65f143cad18af509a2621d6c5925abbd038ea70f
2018-04-13 10:54:42 +02:00
Ivan Donchevskii
bb83f8fdb2 Clang: Set proper translation unit option for UpdateExtraDocumentAnnotations job
Change-Id: I929070698d91d184ca9e0f7cc398be0e74710ce5
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-04-12 09:15:25 +00:00
Ivan Donchevskii
f9d95c9205 Clang: Optimize clang overview model
Build the tree in only one loop.

clangbackend generates tokens almost as fast as it
did before (about 10% slower in general).
Broken documents are more affected and take much more
time (about 300%) but it's better to have this time spent
on backend side then in QtC itself.

Task-number: QTCREATORBUG-20205
Change-Id: I34c58bca30c4494005a029abd82c7e612ecd6fb9
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-04-12 09:15:12 +00:00
Ivan Donchevskii
84b983617f Clang: Support anonymous types in tokens
Add extra data to Keyword tokens.
Does not affect highlighting.

Change-Id: I206499ea35ee4ece5fe442665c904090cf5d90fc
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-04-12 06:51:07 +00:00
Nikolai Kosjar
a821533851 Clang: Suppress diagnostic "file 'x' from the precompiled header has been overridden"
...since it's not critical, only annoying to see.

If this diagnostic occurs, changes in a non-project header will not be
reflected in the main file. That's not a common case.

Task-number: QTCREATORBUG-20125
Change-Id: Ic7b65506cdd6bc1c163050497d6f7c106a48d517
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-04-11 10:53:38 +00:00
Orgad Shaneh
eea6a7c3b3 Utils: Purge qtcfallthrough.h
No longer needed.

Change-Id: I9b0bee014df89d4c567f1d2431b5ff9404f5f925
Reviewed-by: hjk <hjk@qt.io>
2018-04-09 09:04:13 +00:00
hjk
cf4dbb4bb6 ClangSupport: Use simpler structures in some cases
The patch is mostly mechanical, but contains also a few spurious changes
from values references for some local variables, foreach -> ranged for
etc that I coulnd't resist.

Change-Id: I58f0bd972546895eb318607cbfbd7ac35caf3f23
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-04-06 12:55:23 +00:00
Ivan Donchevskii
d0273f83f9 Clang: Fix unit-tests build for MSVC 2015
Change-Id: If81ad5d8ea704a2714d3088024d701202e9854f2
Reviewed-by: David Schulz <david.schulz@qt.io>
2018-02-23 14:40:33 +00:00
Ivan Donchevskii
34fec1cad2 Clang: Make Q_PROPERTY replacement simpler
The infrastructure around Q_PROPERTY extraction
allows to make it static assert and still find
it's parent.
This way makes it easier for Clang to parse
and does not provide unexisting functions for class.

Change-Id: I1c40550c72d214c2448169094a46c6f793132f23
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-02-23 08:40:33 +00:00
Nikita Baryshnikov
f369048d41 Clang: Suppress a compiler warning in fulltokeninfo.cpp
Change-Id: I75fadf3c38b2a75cb8791da0271bf6e100505708
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-02-22 15:13:34 +00:00
Ivan Donchevskii
8ffae6a08c Clang: Add cursor range to extra token information
Change-Id: Id410c94c79d61b8f4d5b53f937827356272b9f65
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-02-21 06:55:39 +00:00
Ivan Donchevskii
dacfc611c5 Clang: Add highlighting types for ObjectiveC
Builtin code model supports ObjectiveC classes,
properties, etc. We can easily get the same
information from clang.

Change-Id: Iede5e177d4932f404e4ccb81ae356eee8faffb71
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-02-20 13:34:37 +00:00
Ivan Donchevskii
66c7629814 Clang: Properly handle Q_PROPERTY in TokenInfo
Transform Q_PROPERTY into unique AST node.
Mark different parts with types and search for parent
in FullTokenInfos.

Change-Id: Iaa1ec0c73d34773edf5605d3682bd6a290d195de
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-02-20 06:49:47 +00:00
Ivan Donchevskii
d01b474b46 Clang: Refactor TokenInfos
Remove code duplication.

Change-Id: Ib1859f2c3a04f66d0f0b669b4e93a7fc06ab8e61
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-12 08:03:47 +00:00
Eike Ziller
5432dd1f5c Merge remote-tracking branch 'origin/4.6'
Conflicts:
	src/plugins/coreplugin/locator/locator.cpp
	src/plugins/imageviewer/imageviewerplugin.cpp
	src/plugins/remotelinux/remotelinuxplugin.cpp
	src/tools/clangbackend/source/tokeninfo.cpp
	tests/unit/unittest/data/highlightingmarks.cpp

Change-Id: I74cc3ba3a2836cb9d0e65d3380d8c4f88d720c67
2018-02-07 11:58:23 +01:00
Ivan Donchevskii
ad2461caca Clang: Add environment variables for extra clang flags
Different variables for clang code model and clang
static analyzer.

Task-number: QTCREATORBUG-19329
Change-Id: I64abdefb8c646a6f45f789a61abf75198e7ca3b8
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-07 08:05:08 +00:00
Ivan Donchevskii
e7792f8f50 Clang: Query extra document annotations after resume
Resume job sends only basic tokens data therefore
one more UpdateExtraDocumentAnnotations job is required.

Change-Id: I6d5e65f22d26cf9c905c894654ff87f920659d8f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-06 10:42:39 +00:00
Ivan Donchevskii
d81580b7a3 Clang: extra clangbackend job to collect full token info
Limit document annotations job to only highlighting data
collection and move more expensive calls into separate job
that runs after it.

Change-Id: Ie792a3f741ac45c81033dd5b3a20ed061604f927
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-02 07:01:59 +00:00
Ivan Donchevskii
bdd5066665 Clang: introduce more data in TokenInfo
Data added:
- return type spelling for functions
- parent spelling
- access specifier for class fields and methods
- storage class

New highlighting types are added, therefore
types are now categorized by class, struct, etc.

Change-Id: I1739b94a6f777045fde655060d8b9a12b6e0889b
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-02 07:01:28 +00:00
Nikolai Kosjar
4f20c0d4ed Clang: Highlight invalid declarations as text
...instead of the corresponding declaration color.

Task-number: QTCREATORBUG-18686
Change-Id: Ice4d84816351af79efa286f49516c392bd80da86
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-02-01 14:12:58 +00:00
Ivan Donchevskii
fbbdfd2444 Clang: Add commentary about column convertion
... to/from utf8 byte offset used by Clang.

Change-Id: I294d6cd61b416e5f2d64206ee2f3f1b4a91fb1d3
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-01 12:22:45 +00:00
Ivan Donchevskii
b30643c4fa Clang: fix CINDEX_VERSION_MINOR for clang_getFileContents
Change-Id: Id546906fb119be2415500ae13f64c2c0e1e6a81b
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-02-01 08:22:22 +00:00
Ivan Donchevskii
09310bcdc6 Clang: fix utf8 related column numbers
Use new clang_getFileContents to efficiently convert
utf8 byte offsets from line start to column numbers.
Also provide simplier backwards convertion to pass
resulting utf8 offset to clang.

Task-number: QTCREATORBUG-16941
Change-Id: If0e58fe01ad3e281b7e952e972b9e86f6e75aadb
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
2018-01-26 15:39:31 +00:00
Nikolai Kosjar
30c95c937b Clang: Take over jobs if document gets new project part
We could loose jobs if e.g. the user switched to another parse context
or shuffled project files between targets/products/project-parts while
there were still jobs in the queue.

Previously, changing the project part id of a document was a two step
process:
  1) Unregister document with old project part id
  2) Register document with new project part id
On 1), we have thrown the document processors (and thus the job queue)
away. On 2), we have created a new document. Due to this separation the
backend could not take over jobs to the new document (processor) - it
could not know that these commands belong together.

Now, we avoid the explicit unregister command. On a register command the
backend has enough context to find out what to do, it can take over
relevant jobs.

Task-number: QTCREATORBUG-18856
Change-Id: Ib68a8e62140fcfdb2de58dcd2ae955b4c2e15166
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-22 14:00:03 +00:00
Nikolai Kosjar
608e7ec245 Clang: Fix tooltips for constructors
Constructors were not handled yet, so the tooltip for e.g. the
"QString()" constructor was "void ()".

Also, since the help system has problems with overloads, show the
function signature as clang sees it and provide a help system query that
will show the documentation for the class instead of the wrong overload.

Change-Id: Idc0cf9dce6a50c323e6fd945f277c7816b0f9b34
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-22 12:33:21 +00:00
Nikolai Kosjar
cf94a15379 Clang: Fix warning in switch()
clangjobrequest.cpp:176:12: warning: enumeration value ‘RequestToolTip’
  not handled in switch [-Wswitch]

Change-Id: I09080548ba45ef99bc0c9e08b06d2ea3268b5662
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-22 08:02:57 +00:00
Nikolai Kosjar
97c2bcf8d2 Clang: Fix comment
Change-Id: Ib69d0696ed7cc810990e61c62a1af236f54f09ca
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-19 14:11:23 +00:00
Nikolai Kosjar
2d7f1d6c8c Clang: Take over jobs if document's project changes
On registerProjectPartsForEditor() we recreated the affected
DocumentProcessors, but did not take care of the jobs that were in the
queue, which effectively could led to lost jobs. Catch up on this.

Task-number: QTCREATORBUG-18856
Change-Id: I4184e5dc6480667953f2d2081ccf39a28c092186
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-19 13:16:07 +00:00
Nikolai Kosjar
7ac1964f2b Clang: Fix left-over qWarnings()
Change-Id: Ife685ca7e9e567b832434ba492607b3819d14d48
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
2018-01-18 09:46:30 +00:00
Nikolai Kosjar
76c25bcd6a Clang: Provide tooltips
This includes also the query data for the help system (F1) for an
identifier under cursor.

Regressions (libclang changes necessary):
 - Function signatures do not contain default values.
 - Aliases are not resolved for/at:
   - template types
   - qualified name of a type

Fixes/Improvements:
 - Resolve "auto"
 - On a template type, show also the template parameter.
 - For a typedef like
     typedef long long superlong;
   the tooltip was "long long superlong", which was confusing.
   Now, "long long" is shown.

New:
 - Show first or \brief paragraph of a documentation comment.
 - Show size of a class at definition.
 - Show size of a field member in class definition.

Task-number: QTCREATORBUG-11259
Change-Id: Ie1a07930d0e882015d07dc43e35bb81a685cdeb8
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
2018-01-16 15:32:15 +00:00
Nikolai Kosjar
54160400e9 Clang: Add logging category for ClangCodeModelServer
This one helps to understand when and why some jobs run.

Change-Id: Ibbafe517cb38bb9b68b73c78aaba0805f11b3964
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-11 08:09:55 +00:00
Nikolai Kosjar
5f8ac59ef8 Clang: Fix tests without any ASSERTs
Change-Id: I3148cb85271ab021832caa5bd09dedb6aeeef49f
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
2018-01-08 15:21:23 +00:00