This patch allows a plugin to insert custom imports. These imports are
used by QtC for syntax highlighting and code completion. This way a
plugin can register types and objects that are available only at
runtime.
This is an example of an imports function implementation:
QList<Import> MyPlugin::imports(ValueOwner *valueOwner, const Document
*context) const
{
// context is needed to know from which project is the opened document
// in this example we don't care about multiple projects
Import import;
import.object = new QmlJS::ObjectValue(valueOwner, "<defaults>");
import.valid = true;
const ComponentVersion version(1, 0);
import.info = ImportInfo::moduleImport("MyPlugin", version,
QString());
auto myType = valueOwner->newObject(nullptr)
myType->setMember("myProperty", valueOwner->valueOwner->intValue());
// add more properties & methods/signals to myType
import.object->setMember("MyType", myType);
// in this example we return only one, but you care return more than
one
return QList<Import>(import);
}
Change-Id: I395c273c7b15a9e4ed5a89a81d70ff92db2b7c0c
Reviewed-by: Marco Benelli <marco.benelli@theqtcompany.com>
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
.. of builtIn qml and cpp code over "Inspect API For Element Under
Cursor" action.
Change-Id: I70d5bec2933b682295c5242248a2b0f95dba4e76
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Enable access to the private Document
instance in the same way its done
already in the ASTObjectValue class
by adding a const getter.
Change-Id: I0581e527bb766fc72682f2e38d0d8d52d4452deb
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
We use forward slashes in all internal paths, even on Windows.
Change-Id: Ie0b418c770dad96829dd357fe425616b6d3a5b82
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
See [global.names] (17.6.4.3.2 in the C++11 spec.)
Change-Id: Iee0972f2eac0c48ac9ca62bf6ced7cb2db669f05
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
CppComponent has extra information on properties that makes sense
also for ObjectValues, change the processProperty method to pass
in an extra struct with that info (and that can be later extended).
Change-Id: If09b178a4095bed03ff59bfb2164088309d2c8e2
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
override on destructors are not very useful anyhow, but also msvc2010
doesn't like them at all.
Change-Id: I2d5f4b0d6148c5e66d2cba604d305707269d12e0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Moved Document::Language, Import::Type and StaticAnalysis::Severity
enums to qmljsconstants.h and renamed values removing the redundant
part.
Thus the effective length changed little or improved
(Document::QmlLanguage => Language::Qml).
The separate file allows better reuse of enum values without introducing
circular dependencies.
Change-Id: I5186d7c04f5d3f6c289068b919be5ff1ff118326
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Qmljs now keeps a cache of parsed qrc files, and can resolve "qrc:" links.
This breaks the assumption that the name that the qml files has on
the filesystem is the one that qml sees, and that contents of
directories can be found just looking at file whose path starts with the
directory path.
Currently the first file is used when multiple qrc files contain the same
path, but support for strict and weak path resolving is already there.
At the moment only qrc files for projects that call updateQmljsCodeModel
are updated.
ChangeLog: QmljsSupport: Imports using qrc links are resolved.
Task-number: QTCREATORBUG-8953
Change-Id: I695fac2692af2417d49c192c580a1c2e7b4873f4
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
We had a qmltypes file that was encoded in UTF16 and did not work.
We should at least warn about it.
Change-Id: I42555782ee16ddd25552f919845aa85ff1f3f636
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
Ran script to remove inludes on a trial-and-error basis and
manually corrected it (Parser excluded).
Change-Id: I5ec6e1076430009bb72094411b2c3386f8bea548
Reviewed-by: Aurindam Jana <aurindam.jana@digia.com>
Reduce the padding in some often-used structs for 64bit machines.
32bit machines should also profit from most changes, but to a
lesser degree.
Change-Id: Ic4c67b94e962731de4f31164c52a372d78944ccc
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Getting the #include directives ready for Qt5. This includes the
new-project wizards.
Change-Id: Ia9261f1e8faec06b9285b694d2b7e9a095978d2b
Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
* Don't build all default values (including the global object)
separately for each ValueOwner instance.
* Instead, keep all global, immutable values in a single, shared
instance.
While refactoring, some cases where we *modified* the global object had
to be removed:
* C++ context properties no longer get injected into the global object,
instead they now have their own scope just above the global one.
* The Qt object's prototype no longer gets modified in Link. Instead,
it's now a reference to the "Qt" object provided in a qmltypes file.
* The whole concept of a function 'Activation' that could potentially
affect the global object was removed.
Change-Id: Id382faf965efa747fcc7a9b0bc2c90429d84d61b
Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
* FunctionValues know about optional arguments (for builtins)
* ASTFunctionValues only report themselves as variadic if they
use the 'arguments' array.
* Function argument hint shows optional args and variadic.
* Completion automatically adds parentheses.
Change-Id: Ib2598600ff8b1ce8c5de3bcabd24a3e171ff3a57
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
The qmltypes files shipped with libraries shouldn't, but could define
components that form a prototype cycle. Use of the new
QmlObjectValue::prototypes() function avoids the code model getting
stuck in an infinite loop for these cases.
For plain ObjectValues this is already solved by using
PrototypeIterator.
Change-Id: I0f562672ab99b454bc3a0121c7a1b9eca43476bb
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
To distinguish known-to-be-undefined from a genuinely unknown value.
Change-Id: I606b4ea4d726f94553400b8950d3c0a4e76564a8
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
And introduce a good error message for the case when someone
forgets the specialization of the value_cast template.
Change-Id: Iec55a839e8f5eef5872b1dab8601f66e0e0c88de
Reviewed-by: Leandro T. C. Melo <leandro.melo@nokia.com>
This means the code model will now offer correct completion and
highlighting for arguments of signals in their handlers, example:
MouseArea {
onClicked: {
mou<complete> // now also completes 'mouse'
}
}
Reviewed-by: Fawzi Mohamed
Change-Id: I01838ef00e391b13e6e5a832c9ec3cd983689c5b
Reviewed-on: http://codereview.qt-project.org/6147
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
Sanity-Review: Christian Kamm <christian.d.kamm@nokia.com>