ScopeTree keeps a weak pointer to its parent scope and strong shared
pointers to its children. Avoid passing bare pointers around, so that we
cannot create multiple shared pointers independently from the same bare
pointer.
Change-Id: Id0faece550b1878363004d843a8fa5c1164794ae
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
We want to read qmltypes files and analyze scopes also from other tools.
Furthermore, restructure the shared directory, so that each tool only
includes what it needs.
Change-Id: I96a2dcc8b1c5fac613592fb1867bf51fa5ef3a6e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This is some ancient, pre-Qt5 way of describing singletons. We don't
need it anymore.
Change-Id: I6355acf187b8ede4298a7026229a587cd1a12f1b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Due to the fact that multiple targets may be present in the same
directory we have to ensure they all get a unique qmltypes.
Fixes: QTBUG-82710
Change-Id: I4d7966035644b68f7d3330a4c974369503c48bf2
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Previously we would run into infinite loops on those. Mind that qmllint
will reject a file called Window.qml that imports QtQuick.Window and
then instantiates a Window {}. Such a thing is bad style.
Task-number: QTBUG-82817
Change-Id: I6db82ca1794c3020dcb7d7e837fe44f72bca5029
Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Otherwise we miss subtleties such as Label vs. T.Label.
Task-number: QTBUG-82817
Change-Id: Idc2131426b2fd96f279dab83292a348b9295d5c0
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The Qt version was added in 5.14 "for use as eventual replacement for
QString::SplitBehavior." Move another step cloaser to that goal.
Change-Id: I3214ad6ccaca9dfd4a026589cabeb40cbf4a6298
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
In many places we carry major and minor versions or revisions that are
loosely coupled to minor versions. As the Qt minor version resets now,
we need to handle these things more systematically. In particular, we
need to add a "major" part to revisions.
QTypeRevision can express the current major/minor pairs more efficiently
and can also be used to add a major version to revisions. This change
does not change the semantics, yet, but only replaces the types.
Change-Id: Ie58ba8114d7e4c6427f0f28716deee71995c0d24
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Adjust the code to work with the new QString and QVector data
structures that have inlined size and data pointers.
Fix a large bunch of compiler warnings from QFlags.
Update dependencies for qtbase and qtsvg
Change-Id: Iba237aed90c140b822e0cf501b9fb7156ec27c2d
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
There is no real reason to tolerate it. We can generate all qmltypes at
build time, and if we can't find them, the results are likely to be off.
Change-Id: Id935d76ac3ca6b601381b40a73d7fbacca342c4d
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
... except if the document parent is Component. Then leave the type
alone.
Change-Id: Id7b2e6efdefe18a8d375967ddedcdf9e07a07946
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
We can analyze access to many field member expressions and figure out if
the accessed members exist. There are limits to this, of course. Generic
JavaScript values are out of scope here.
Change-Id: Id2e7613e56f06555cc3a2ba1c51683d9ea0bb84b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Don't accidentally overwrite the anonymous scope, and clearly mark where
we want to modify the scopes and where we just want to retrieve them.
Change-Id: I801d378ccaea6eb2548875766a9d3141dcb9f5e5
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The import statements in qmldir files are not required to have a version
attached to them anymore.
Change-Id: I925d5f965c73685874c23510cf2e569d1528d8c1
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
The plugins.qmltypes for QtQml have proper descriptions for those. They
do have some interesting properties, after all.
Change-Id: I7f0922dd14c66c64fe88b55087fd55cb992d33db
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
qmllint needed to be refactored before we can add any new functionality:
* Fix all the (C++) linter warnings
* Remove pointless namespaces
* Merge ScopeTree and FakeMetaObject into one class
* Remove the "Fake" from class and variable names
* Remove dead code
* Add "We mean it" warnings everywhere
* Unify #include style
This also "accidentally" fixes the automatic matching of signal handlers
in Connections elements to signals in their parent scopes.
Change-Id: Idf8daae34dfd6c0ee00da28b017f921da3eba25c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This makes it possible to resolve components which were either directly
registered in the application or specified as composite types in qmldir
files.
Change-Id: I42482563f31ac780d6b37e62375d09d122c4a308
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Those are typically part of Connections elements. We want to use
functions instead.
Change-Id: I08b65eae8b8a6ba95f7a3570f5465961abbb506e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
- Do not warn about parent access in unknown components
This avoids false positive warnings when an imported component could not
be found (or when it actually was not imported).
We still warn about the component which could not be found, so the user
is still informed that something is not right.
We also still emit a warning when we know the properties of a component,
and parent is not one of them.
- Do not recommend the use of parent to address the root components
properties. For this to work, we would need to know whether the root
component reparents its children or not. Moreover, id lookups are
actually faster than parent lookups.
Change-Id: I83d0e71e4bf20d34a3e6d836c2b123b2bf0d416e
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
- Fix the case where multiple unqualified accesses would be mapped to
the same signal (wrong in all but one cases), as the event parameter
has the same name and we were using a QHash. Fixed by using QMultiHash
and searching for the matching signal handler (by location)
- Recommend arrow functions for single line event handlers
Change-Id: I3cbb85fe0e49b454908ca03b4c86318ef02e364c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
The linter has gained a new option (-U/--check-unqualified).
If run with this option, it warns about occurrences of unqualified identifiers.
Furthermore, it attempts to detect the reason for why the identifier can be
used unqalified:
- If the id originates from the root element, it suggests to qualify the
access either with the root element's id, or with "parent" if applicable.
- If the id is the parameter of a signal, it suggests to use functions in the
handler, instead of relying on the signal parameters to be "magically"
injected into scope.
The linter does not attempt to handle with statements, but warns the
user instead that they are a bad idea.
Change-Id: I9aaf28c37595d84886a1071d49b86799b222a617
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>