Commit Graph

1581 Commits

Author SHA1 Message Date
Marco Bubke
ecce6cd12f Clang: Add -Wno-exit-time-destructors
Change-Id: Ibf6b5c9a791e0fad49939c2a352b7eaa064f2376
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-10-01 13:07:12 +00:00
Marco Bubke
54f505b834 Clang: Disable warning newline-eof
Change-Id: I9a773d70485f3e534e7fabdde3bd5936002c851c
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-10-01 13:07:07 +00:00
Marco Bubke
d6d5d9ac8c Clang: Improve IpcCommunicator::requestDiagnostics
Add logging and don't send if sendMode is IgnoreSendRequests.

Change-Id: Ia3df9fd2c1c75cfec720233518401fc9df5e0017
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-10-01 13:05:13 +00:00
Nikolai Kosjar
f1300df6b3 Strip BOM from files
Change-Id: I9167c016760fe1e8378cdf84144c4bed5cd4e57c
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-10-01 10:51:10 +00:00
Nikolai Kosjar
514efee682 Clang: Fix typo in function name
Change-Id: I6f3dd4cb41f52df440ce9d133cc199f6c66b742c
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-30 14:33:52 +00:00
Marco Bubke
c5941f9fec Clang: Call updateTranslationUnit for reloaded files
If a file is reloaded it should update every translation unit.

Change-Id: Ib61d933e95fcd9fe4d32363ddc06f5edcca55e35
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-30 14:29:29 +00:00
Nikolai Kosjar
26c0d6ab92 Clang: Fix race condition when closing a project
...which could lead to undesired asserts:

    SOFT ASSERT: "!"Got ProjectPartsDoNotExistMessage"" in file
      clangbackendipcintegration.cpp, line 184

Change-Id: If6d67b9f617394ce8f72e7e56699423d47879688
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-30 13:29:24 +00:00
Marco Bubke
25bb8411a4 Clang: Add ClangEditorDocumentProcessor::hasProjectPart
Change-Id: Ie08c44315c9d03434384a1fa0b276e22f45a2107
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-30 11:38:36 +00:00
Nikolai Kosjar
a7928b4b0b Clang: Integrate clang's fixits as refactoring actions
They are invokable by the usual means (Alt+Enter, editor's context menu
> Refactor) plus by the context menu of the editor's left margin for the
related line.

The fixit text comes directly from libclang and is thus not translated.
We modify the text slighty by stripping the diagnostic category prefix
("note:", "error:", ...) and capitalizing the first letter.

A follow-up change should properly indicate available refactorings with
a refactoring icon in the editor's left margin.

Task-number: QTCREATORBUG-14868
Change-Id: I86157c9f824d2a9dedf19087476d02ad1e6cc854
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-29 11:39:21 +00:00
Nikolai Kosjar
de6d7f0617 Clang: Refactor handling of diagnostics
...by introducing ClangDiagnosticManager and the helper class
ClangDiagnosticFilter.

ClangDiagnosticManager will get more state in a follow-up change.

Change-Id: Id2c312bc897ea41ed67292b56b24dcfb7975ff4a
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-29 11:38:53 +00:00
Marco Bubke
b412eb81ea Clang: Add revision and completion management
Reparsing a document is expensive so we should avoid it by all means. In
this patch we prevent that the same document is send again. It isn't send
too in advance of a code completion if there was no changes before the
the completion position.

Change-Id: I0bb786ba1d4e7ce08611a518cb32f8cf8f4d0037
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-28 15:46:15 +00:00
Marco Bubke
b711b3d6e7 Clang: Set diagnostic colors for text editor scrollbar
The colors are different from issus colors to give the user a better
impression.

Change-Id: I0f9bdae8d96434512851460d4eef05e94280ee8e
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-23 16:11:16 +00:00
Marco Bubke
0c53561c75 Clang: Refactor icon setting in ClangTextMark
Change-Id: Ie0c2185d83d3b8344c2f88467236c1eac3b07a6b
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-09-23 16:10:25 +00:00
Marco Bubke
a9193243b9 Clang: Don't show warnings for missing prototypes in C++
Change-Id: I895ec7424e04d1f0d465f008ee4a5b5ff76a4906
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-23 15:41:30 +00:00
Marco Bubke
a272d93fcd Clang: Change name to registerCurrentCppDocuments
registerCurrentUnsavedFiles was misleading.

Change-Id: I5a2444d81d141ced4b8a0fae7236484c9e919d8d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-21 13:28:35 +00:00
Marco Bubke
0d20d56183 TextEditor/Clang: Add font settings for clang diagnostics
Change-Id: Iea2b4fabf0f4620b12f88b108eb59c160945c8d8
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
2015-09-10 13:39:43 +00:00
Eike Ziller
c6125f2790 Merge remote-tracking branch 'origin/3.5'
Change-Id: I8cc26f38a0ac2453c81108e449b6d84efc9e419c
2015-09-08 07:36:36 +02:00
Nikolai Kosjar
164b72b22a Clang: Check for libclang main header file
Otherwise we will run into compile errors if the libclang dev package is
not installed.

Change-Id: I31c05d9d0e11154f1c3748e6736c143805d310e8
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2015-09-04 08:59:51 +00:00
Eike Ziller
c868b9f3ed Merge remote-tracking branch 'origin/3.5'
Change-Id: Ife5fdcd71b0adc99d4297a28a64515e9e93d7864
2015-09-04 09:19:28 +02:00
Nikolai Kosjar
169556db2f C++: Fix crash after triggering completion and closing editor
Fix use-after-free for the following case:
  1. Open an editor
  2. Trigger a long processing completion
     (e.g. simulate with QThread::msleep in
      CppCompletionAssistInterface::getCppSpecifics)
  3. ...and immediately close the editor (e.g. with Ctrl+W)
  4. Wait until it crashes.

The completion thread relied on the BuiltinEditorDocumentParser object,
which is deleted once the editor is closed. Fixed by sharing the
ownership of that object between the *EditorDocumentProcessor and the
completion assist interface.

This case came up when doing tests for the bug report below.

Task-number: QTCREATORBUG-14991
Change-Id: I0b009229e68fc6b7838740858cdc41a32403fe6f
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
2015-09-02 12:37:23 +00:00
Nikolai Kosjar
cfebd9bf7f Clang: Tests: Tweak time out for writing file
Change-Id: Iaf1294776be19805934eb152a9e09f3c68b9d5f6
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
2015-09-02 10:40:42 +00:00
Marco Bubke
610ff191af TextEditor: Move constructor has now noexcept
Otherwise the copy constructor will be used too and we get an error
because it is private.

Change-Id: Ibfe70939ebe34fa9a524b9844a20d962eb09bd97
Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
2015-09-01 11:38:16 +00:00
Marco Bubke
e8e45ca102 Clang: Don't show a warning for unused macros anymore
Change-Id: Ia816476ed577d7060d752e74e5be2c2f1ebb7f12
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-09-01 10:04:19 +00:00
Marco Bubke
9e25fa9a66 Clang: Disable ClangCodeCompletionTest::testUpdateBackendAfterRestart
The integration test has to be rewritten!

Change-Id: Id06f9a3ceb54cf6836f4ca1a745e20fefc6a5391
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:02:40 +00:00
Marco Bubke
7eee8061f6 Clang: Add unsaved files messages
We have auto generated buffers from ui files which are not open but have no
file representation. So we need to provide them as unsaved files only.

Change-Id: I48a426c18e06eeda2fa707864f32f293e17ac651
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:02:19 +00:00
Marco Bubke
6e14eb6940 Clang: Rename ForCodeCompletion in ForEditor
It reflects that the translation units and projects have a tied
relationship with an editor.

Change-Id: I3c01d5776980fe079af1fdef82feded83fdf5463
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:02:02 +00:00
Marco Bubke
1a5e7b778d Clang: Send document revision with the completion request
The sent text should always accompanied by the document revision to avoid
useless the reparsing of the translation unit.

Change-Id: I4af50f277f9352f4af0cdda8a32ad76c44c1935f
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:00:24 +00:00
Marco Bubke
dc31e3742a Clang: Don't replace text if the original text is equal
A replace is changing the document revision which is triggering a reparse
of the translation unit.

Change-Id: I73863af650dd8e6d3fb3e5ab4112609ced201614
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:00:18 +00:00
Marco Bubke
f2b7371af1 Clang: Reparse only if files are changed
Includes are now watched by a file watcher. Unsaved file changes are
watched too. If they are changed the translation units which depend on
them are set to a state which require a reparse. Later the diagnostics
of this units are collected and send back to creator.

Change-Id: I2fb5c7dd6644687f22399edd8d18edd6215c9505
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 15:00:07 +00:00
Marco Bubke
aa6aaee510 Clang: Add brief comment support
Change-Id: I5af23b6694d3d0bf45ed0a30b4d91b350f0515df
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 14:59:50 +00:00
Marco Bubke
b278dc87ca Clang: Add diagnostics
Diagnostics are now moved to the clang backend process. Fixits are
supported too.

Change-Id: I20faacf466bbf78dec479220c3d7b336a47bc453
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-31 14:59:16 +00:00
Marco Bubke
ec4d002857 Clang: Rename command in message
Change-Id: I1e2671d15b0db3c670b86dd0d4bed5ee09e866f1
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-25 12:54:27 +00:00
Nikolai Kosjar
2bc96c7621 Clang: Fix threading issue with QRegExp
exactMatch() is declared const, but is actually not. Replace with
QRegularExpression.

Change-Id: Ib9d9c091de1cd81d81671c19a76cada8777ff287
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
2015-08-17 08:19:59 +00:00
Nikolai Kosjar
039d9309a9 Clang: Ignore include dirs matching lib/clang/x.y/include
On OS X the clang versioning is different.

This completes

    775661fafb
    Clang: Ignore clang include directories from the toolchain

Task-number: QTCREATORBUG-14856
Change-Id: Ib93ce9fcf18a3c8693f9f2af8075eeef8b93fa32
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-08-12 15:59:51 +00:00
Nikolai Kosjar
64d8ac4880 Clang: Fix showing signature tooltips for functions
...and others in the generic completion widget.

Task-number: QTCREATORBUG-14874
Change-Id: I75122eaf364d740b0a64ca514b31a26c5c8ea673
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-08-10 09:35:01 +00:00
Nikolai Kosjar
1ecadd7d76 Clang: Filter out "#include_next in primary source file" warning for headers
Another diagnostic that can't be turned off.

Change-Id: I1e4452ccbb2f1864e1a68cf02a858d410cd0c162
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-08-07 08:19:51 +00:00
Nikolai Kosjar
93e0ffa942 Clang: Increase backend alive timeout
...the backend is not yet multithreaded and on very slow machines on
heavy load this can sum up.

Change-Id: Ia7f456e8558d60aacbe6a689e884342b466063fa
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-08-06 12:43:36 +00:00
Nikolai Kosjar
775661fafb Clang: Ignore clang include directories from the toolchain
Change-Id: I23a91f1511fad81de0abdd8c8d47dc23f0e0ae43
Task-number: QTCREATORBUG-14856
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-08-06 08:05:24 +00:00
Nikolai Kosjar
bde090ae9b Clang: Let clangcodemodel/README point to the corresponding *.qdoc
Change-Id: I5526ed6ea6840ccecd8890adf6ef454e45ba98f9
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
2015-08-06 08:04:10 +00:00
Marco Bubke
8c3c882a8a Clang: Fix parsing of enable_if_t
Task-number: QTCREATORBUG-11864
Change-Id: Ifd0d3482bc4f4373394734d4b173304db32a6a2d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
2015-08-05 10:50:34 +00:00
Nikolai Kosjar
5abfef609a Clang: Check for required mininum LLVM/Clang version
...otherwise, if the compilation fails, the user is left without any
hint.

Change-Id: I753aefac0c9fbd24b148235e792fe3b3a2aea21b
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2015-08-04 09:25:53 +00:00
Nikolai Kosjar
8ac76922d2 Clang: Filter out "#pragma once in main file" warning for headers
This is a libclang bug and unfortunately there is no option to disable
this warning.

Change-Id: I12cdaa0155e7d94a70b8fccd8c9290835704e06b
Task-number: QTCREATORBUG-12067
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
2015-08-04 07:16:35 +00:00
Nikolai Kosjar
a1da7182f9 Clang: Fix memory leak on completion II
...for the following case:

  void fun1();
  void fun2();

  void g()
  {
      fu // Type 'n', wait for the widget, hit return to choose the item
  }

Once e.g. "fun1" is chosen, the completion is triggered again but the
processor (and as result the assist interface) is not freed.

The assumption was that for the AsynchronousWithThread case
IAssistProcessor::perform() would either return 0 (async completion was
started) or != 0 for an immediate proposal. It turns out there is a
third case: no proposal if the completion is not applicable, e.g.
choosing an item in the example above will retrigger completion, however
no completion makes sense for "fun1()<CURSOR>" for an idle editor.

Workaround the case with a getter/setter in IAssistProcessor. Proper
solution should (slightly?) rework the IAssistProcessor API.

Change-Id: I44dde8287998d54ded1ea07e7c39a5157cf62029
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-29 12:18:39 +00:00
Nikolai Kosjar
b783bcea60 Clang: Allow to time high-level functions
...by enabling the logging rule:

    qtc.clangbackend.timers=true

Change-Id: I085c6bbebc0343b74bcb90119d1ebb80ad49518d
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-29 08:53:24 +00:00
Nikolai Kosjar
92ff267845 Clang: Remove logging category qtc.clangcodemodel.clangeditordocumentprocessor
It did not provide much value.

Change-Id: If6d3c65102eef1bba72c8da4870ddb11a47d4dba
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-29 08:53:15 +00:00
Nikolai Kosjar
b86600a587 Clang: Remove duplicated functions
Change-Id: I0758fc06843363d58faa835238a587095c9eb6de
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-27 13:19:06 +00:00
Nikolai Kosjar
91429aa752 Clang: Fix completion position for clang and proposal
* Rename some members/functions to clarify their meaning.

* Ensure that the position for the proposal widget is at start of the
  identifer, so that the filter prefix will be found correctly in the
  GenericProposalWidget. For certain cases the completion were
  calculated but the widget was never shown:

  Case 1:

    void f()
    {
        <COMPLETION_CURSOR>
    }

  Case 2:

    void f()
    {
        st<COMPLETION_CURSOR>
    }

  Case 3:

    if (true)
      <COMPLETION_CURSOR>

  Case 4:

    foo. mem<COMPLETION_CURSOR>

Change-Id: Ie79e01e8a22f8ec306136ec4ccbfffd544edd573
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-27 13:19:02 +00:00
Nikolai Kosjar
49b1d35778 Clang: Clean up ClangCompletionContextAnalyzer
Change-Id: I899cc5cffc389ef023b35825807bde469bb6d31d
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-27 13:18:58 +00:00
Nikolai Kosjar
4f7649633c Clang: Free us from specific Qt versions
More precisely, free us from specific Q_MOC_RUN/QT_NO_META_MACROS code
paths in QtCore/qobjectdefs.h.

In order to track signals and slots we provided custom definitions of
e.g. "Q_SIGNAL" by including qt5-qobjectdefs-injected.h with "-include".
We also had to ensure that those macros were not overwritten by Qt's
qobjectdefs.h, which we did by defining QT_NO_META_MACROS. However, this
came with a cost: we needed to replicate all the other macro definitions
in the Q_MOC_RUN/QT_NO_META_MACROS code path, e.g. Q_INTERFACES. This
bound us to specific versions of qobjectdefs.h and occasionally we had
to adapt (see change 4eafa2e02b).

The new approach wraps Qt's qobjectdefs.h with the help of
"include_next". In the wrapper header, we only redefine what is
necessary.

The "include_next" directive is originally a GNU extension. Clang seems
to support it unconditionally, as [1] implicitly states.

[1] http://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros

Change-Id: Ic1a263f94b178349cb32bfdbb074ad5e6e0761ee
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
2015-07-27 13:12:41 +00:00
Nikolai Kosjar
09b405d11e Clang: Extract some functions in LibClangOptionsBuilder
...makes the high-level function build() less noisy.

Change-Id: Ib09fba315845a604166489fd400d0be14e16fc23
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
2015-07-27 12:26:41 +00:00