...as otherwise the completion windows stays open and gets in the way.
Fixes: QTCREATORBUG-21767
Change-Id: Ib0a841b9d9de52109439f067c466478744361814
Reviewed-by: David Schulz <david.schulz@qt.io>
The perfect match is used to determine whether to show a completion list
window or not. Consider:
int foo;
int foobar;
void f()
{
// Type "foo"
// ==> Previously, the completion window did not even show up as
// "foo" was regarded a perfect match. This was annoying if you
// have actually intended to complete "foobar".
// ==> Now, the completion window does show up and shows both items.
// The perfect match now considers other items for prefixes.
// Without "foobar", the behavior is as before - no window pop
// ups.
}
Fixes: QTCREATORBUG-20857
Change-Id: Ifdafcf9304a7cb36d646f776755063a854a79a90
Reviewed-by: David Schulz <david.schulz@qt.io>
The regular expression must match the beginning of the string.
Broke by 95310b28f3.
Task-number: QTCREATORBUG-19170
Change-Id: Id95751e35ff48792333745d07a07da50af703f8f
Reviewed-by: André Hartmann <aha_1980@gmx.de>
If prefix is equal to some completion then show it
before anything else.
Task-number: QTCREATORBUG-15445
Change-Id: I976da4a829b818e843d31a76d2818eb5bbedda93
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
...caused by
commit fab4dd068e
CodeAssist: Fix auto completion if function signature is shown
The crash occurs when e.g. typing "lib" in a *.pro file.
Ensure to remove duplicates before filtering, otherwise the duplicates
are removed afterwards and leave dangling pointers in the already
filtered items (GenericProposalModel::m_currentItems).
Change-Id: If6f027378beea2386d25389e366047a29513b553
Reviewed-by: David Schulz <david.schulz@qt.io>
This reverts
commit 3bf19030ab.
CodeAssist: Fragile proposals aren't closed by automatic proposals.
which fixed the case [1] but introduced the regression in case [2]. Re-
implement the fix for [1] in a different way: Check whether the new
proposal has any items to show before closing the function signature
hint.
Case [1]
void f(int);
void g()
{
f(bar // This is what we will have in the end. The steps are:
// 1. Type "f("
// --> OK, function signature pop up is shown.
// 2. Type "bar"
// --> OPS, function signature pop up is closed and no
// new completion list is shown because "bar" does
// not match any declarations.
}
Case [2]
int barman = 0;
void f(int);
void g()
{
f(bar // This is what we will have in the end. The steps are:
// 1. Type "f("
// --> OK, function signature pop up is shown.
// 2. Type "bar"
// --> OPS, no auto completion list for "barman" is
// proposed.
}
Task-number: QTCREATORBUG-16934
Change-Id: I8456275d951de9e6fc53285a5dbcbd448d49ad08
Reviewed-by: David Schulz <david.schulz@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>
~GenericProposalModel() did not delete all original items loaded, but the
original items minus the recognized duplicates.
Change-Id: If34f805f8f86391be6e7590e943c1c5adac14869
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
For unit test we need to break every dependency to the TextEditor
Widget etc.. With an abstract interface we can implement it in clang
without relying on unwanted dependencies. It makes it also easier to
compute the values deferred.
Change-Id: I1b313a1625f4e80bd324ab4bf1a7c4f6b690abe9
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This reverts commit c5f70a3bad1ee2457741459cafb6419c67c417ad.
We will set the rich text unconditionally in a follow-up change to
simplify things.
Change-Id: I59aad8e33011ef68aa7c32ec80bb02edfd29c6a6
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
The tooltip text right to the completion list item is prepared for rich
text (html) interpretation, but the QLabel the text will finally be
displayed with has no explicit text format set and thus defaults to auto
detection. The auto detection works fine for e.g. "<i>int optionalArg</
i>" but fails for "const Foo&".
Task-number: QTCREATORBUG-15630
Change-Id: Ia58d65ee542730e4823c69150d452cdde98112f8
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
Mostly done using the following ruby script:
Dir.glob('**/*.cpp').each { |file|
next if file =~ %r{src/shared/qbs|/qmljs/}
s = File.read(file)
s.scan(/^using namespace (.*);$/) {
ns = $1
t = s.gsub(/^(.*)\b#{ns}::((?!Const)[A-Z])/) { |m|
before = $1
char = $2
if before =~ /"|\/\/|\\|using|SIGNAL|SLOT|Q_/
m
else
before + char
end
}
if t != s
puts file
File.open(file, 'w').write(t)
end
}
}
Change-Id: Ief087658e2adc337ee02c49f0fb406597114df07
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
Remove GenericProposalModel convenience constructor,
add GenericProposal instead. Less user side code.
Change-Id: I833f9943df27b50579485c93efb96943ec403f65
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Simplifies the code base by removing one level of unused
and unneeded abstraction.
- Merge {I,Default}AssistInterface to AssistInterface
- Merge {IAssist,Basic}ProposalItem to AssistProposalItem
- Merge {IGenericProposal,BasicProposalItemList}Model to GenericProposalModel
Change-Id: I54ee7b095427383d67a00fc1d87c3808c21d812d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>