forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/8.0'
Conflicts: src/plugins/clangcodemodel/clangdclient.cpp src/plugins/projectexplorer/kitmanagerconfigwidget.cpp Change-Id: Id1454bfe8e4f283f3b06ac6945aced2975814161
This commit is contained in:
@@ -438,9 +438,100 @@ FilePath FileUtils::homePath()
|
|||||||
|
|
||||||
/*! \class Utils::FilePath
|
/*! \class Utils::FilePath
|
||||||
|
|
||||||
\brief The FilePath class is a light-weight convenience class for filenames.
|
\brief The FilePath class is an abstraction for handles to objects
|
||||||
|
in a (possibly remote) file system, similar to a URL or, in the local
|
||||||
|
case, a path to a file or directory.
|
||||||
|
|
||||||
On windows filenames are compared case insensitively.
|
Ideally, all of \QC code should use FilePath for this purpose,
|
||||||
|
but for historic reasons there are still large parts using QString.
|
||||||
|
|
||||||
|
FilePaths are internally stored as triple of strings, with one
|
||||||
|
part ("scheme") identifying an access method, a second part ("host")
|
||||||
|
a file system (e.g. a host) and a third part ("path") identifying
|
||||||
|
a (potential) object on the systems.
|
||||||
|
|
||||||
|
FilePath follows the Unix paradigm of "everything is a file":
|
||||||
|
There is no conceptional difference between FilePaths referring
|
||||||
|
to plain files or directories.
|
||||||
|
|
||||||
|
A FilePath is implicitly associated with an operating system via its
|
||||||
|
host part. The path part of a FilePath is internally stored
|
||||||
|
with forward slashes, independent of the associated OS.
|
||||||
|
|
||||||
|
The path parts of FilePaths associated with Windows (and macOS,
|
||||||
|
unless selected otherwise in the settings) are compared case-insensitively
|
||||||
|
to each other.
|
||||||
|
Note that comparisons for equivalence generally need out-of-band
|
||||||
|
knowledge, as there may be multiple FilePath representations for
|
||||||
|
the same file (e.g. different access methods may lead to the same
|
||||||
|
file).
|
||||||
|
|
||||||
|
There are several conversions between FilePath and other string-like
|
||||||
|
representations:
|
||||||
|
|
||||||
|
\list
|
||||||
|
|
||||||
|
\li FilePath::fromUserInput()
|
||||||
|
|
||||||
|
Convert string-like data from sources originating outside of
|
||||||
|
\QC, e.g. from human input in GUI controls, from environment
|
||||||
|
variables and from command-line parameters to \QC.
|
||||||
|
|
||||||
|
The input can contain both slashes and backslashes and will
|
||||||
|
be parsed and normalized.
|
||||||
|
|
||||||
|
\li FilePath::nativePath()
|
||||||
|
|
||||||
|
Converts the FilePath to the slash convention of the associated
|
||||||
|
OS and drops the scheme and host parts.
|
||||||
|
|
||||||
|
This is useful to interact with the facilities of the associated
|
||||||
|
OS, e.g. when passing this FilePath as an argument to a command
|
||||||
|
executed on the associated OS.
|
||||||
|
|
||||||
|
\note The FilePath passed as executable to a CommandLine is typically
|
||||||
|
not touched by user code. QtcProcess will use it to determine
|
||||||
|
the remote system and apply the necessary conversions internally.
|
||||||
|
|
||||||
|
\li FilePath::toUserOutput()
|
||||||
|
|
||||||
|
Converts the FilePath to the slash convention of the associated
|
||||||
|
OS and retains the scheme and host parts.
|
||||||
|
|
||||||
|
This is rarely useful for remote paths as there is practically
|
||||||
|
no consumer of this style.
|
||||||
|
|
||||||
|
\li FilePath::displayName()
|
||||||
|
|
||||||
|
Converts the FilePath to the slash convention of the associated
|
||||||
|
OS and adds the scheme and host as a " on <device>" suffix.
|
||||||
|
|
||||||
|
This is useful for static user-facing output in he GUI
|
||||||
|
|
||||||
|
\li FilePath::fromVariant(), FilePath::toVariant()
|
||||||
|
|
||||||
|
These are used to interface QVariant-based API, e.g.
|
||||||
|
settings or item model (internal) data.
|
||||||
|
|
||||||
|
\li FilePath::fromString(), FilePath::toString()
|
||||||
|
|
||||||
|
These are used for internal interfaces to code areas that
|
||||||
|
still use QString based file paths.
|
||||||
|
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
Conversion of string-like data should always happen at the outer boundary
|
||||||
|
of \QC code, using \c fromUserInput() for in-bound communication,
|
||||||
|
and depending on the medium \c nativePath() or \c displayName() for out-bound
|
||||||
|
communication.
|
||||||
|
|
||||||
|
Communication with QVariant based Qt API should use \c fromVariant() and
|
||||||
|
\c toVariant().
|
||||||
|
|
||||||
|
Uses of \c fromString() and \c toString() should be phased out by transforming
|
||||||
|
code from QString based file path to FilePath. An exception here are
|
||||||
|
fragments of paths of a FilePath that are later used with \c pathAppended()
|
||||||
|
or similar which should be kept as QString.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FilePath::FilePath()
|
FilePath::FilePath()
|
||||||
|
|||||||
@@ -262,7 +262,6 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP
|
|||||||
indexingOption += "=0";
|
indexingOption += "=0";
|
||||||
const QString headerInsertionOption = QString("--header-insertion=")
|
const QString headerInsertionOption = QString("--header-insertion=")
|
||||||
+ (settings.autoIncludeHeaders() ? "iwyu" : "never");
|
+ (settings.autoIncludeHeaders() ? "iwyu" : "never");
|
||||||
|
|
||||||
#ifdef WITH_TESTS
|
#ifdef WITH_TESTS
|
||||||
// For the #include < test, which needs to get a local header file, but the list
|
// For the #include < test, which needs to get a local header file, but the list
|
||||||
// is being flooded with system include headers. 4280 on Windows!
|
// is being flooded with system include headers. 4280 on Windows!
|
||||||
@@ -270,8 +269,12 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP
|
|||||||
#else
|
#else
|
||||||
const QString limitResults = QString("--limit-results=%1").arg(settings.completionResults());
|
const QString limitResults = QString("--limit-results=%1").arg(settings.completionResults());
|
||||||
#endif
|
#endif
|
||||||
Utils::CommandLine cmd{settings.clangdFilePath(), {indexingOption, headerInsertionOption,
|
Utils::CommandLine cmd{settings.clangdFilePath(),
|
||||||
limitResults, "--limit-references=0", "--clang-tidy=0"}};
|
{indexingOption,
|
||||||
|
headerInsertionOption,
|
||||||
|
limitResults,
|
||||||
|
"--limit-references=0",
|
||||||
|
"--clang-tidy=0"}};
|
||||||
if (settings.workerThreadLimit() != 0)
|
if (settings.workerThreadLimit() != 0)
|
||||||
cmd.addArg("-j=" + QString::number(settings.workerThreadLimit()));
|
cmd.addArg("-j=" + QString::number(settings.workerThreadLimit()));
|
||||||
if (!jsonDbDir.isEmpty())
|
if (!jsonDbDir.isEmpty())
|
||||||
|
|||||||
@@ -153,6 +153,9 @@ void CompilationDbParser::parserJobFinished()
|
|||||||
|
|
||||||
void CompilationDbParser::finish(ParseResult result)
|
void CompilationDbParser::finish(ParseResult result)
|
||||||
{
|
{
|
||||||
|
if (result != ParseResult::Failure)
|
||||||
|
m_guard.markAsSuccess();
|
||||||
|
|
||||||
emit finished(result);
|
emit finished(result);
|
||||||
deleteLater();
|
deleteLater();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ public:
|
|||||||
QList<ProjectExplorer::FileNode *> scannedFiles() const;
|
QList<ProjectExplorer::FileNode *> scannedFiles() const;
|
||||||
DbContents dbContents() const
|
DbContents dbContents() const
|
||||||
{
|
{
|
||||||
m_guard.markAsSuccess();
|
|
||||||
return m_dbContents;
|
return m_dbContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,8 @@ DockerDeviceWidget::DockerDeviceWidget(const IDevice::Ptr &device)
|
|||||||
m_pathsListEdit->setToolTip(Tr::tr("Maps paths in this list one-to-one to the "
|
m_pathsListEdit->setToolTip(Tr::tr("Maps paths in this list one-to-one to the "
|
||||||
"docker container."));
|
"docker container."));
|
||||||
m_pathsListEdit->setPathList(data.mounts);
|
m_pathsListEdit->setPathList(data.mounts);
|
||||||
|
m_pathsListEdit->setMaximumHeight(100);
|
||||||
|
m_pathsListEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
|
|
||||||
auto markupMounts = [this, pathListLabel] {
|
auto markupMounts = [this, pathListLabel] {
|
||||||
const bool isEmpty = m_pathsListEdit->pathList().isEmpty();
|
const bool isEmpty = m_pathsListEdit->pathList().isEmpty();
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
|
|||||||
{
|
{
|
||||||
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||||
|
|
||||||
QLabel *label = new QLabel(tr("Name:"));
|
auto label = new QLabel(tr("Name:"));
|
||||||
label->setToolTip(tr("Kit name and icon."));
|
label->setToolTip(tr("Kit name and icon."));
|
||||||
|
|
||||||
QString toolTip =
|
QString toolTip =
|
||||||
@@ -81,16 +81,19 @@ KitManagerConfigWidget::KitManagerConfigWidget(Kit *k) :
|
|||||||
Q_ASSERT(fileSystemFriendlyNameRegexp.isValid());
|
Q_ASSERT(fileSystemFriendlyNameRegexp.isValid());
|
||||||
m_fileSystemFriendlyNameLineEdit->setValidator(new QRegularExpressionValidator(fileSystemFriendlyNameRegexp, m_fileSystemFriendlyNameLineEdit));
|
m_fileSystemFriendlyNameLineEdit->setValidator(new QRegularExpressionValidator(fileSystemFriendlyNameRegexp, m_fileSystemFriendlyNameLineEdit));
|
||||||
|
|
||||||
label = new QLabel(tr("File system name:"));
|
auto fsLabel = new QLabel(tr("File system name:"));
|
||||||
label->setToolTip(toolTip);
|
fsLabel->setToolTip(toolTip);
|
||||||
connect(m_fileSystemFriendlyNameLineEdit, &QLineEdit::textChanged,
|
connect(m_fileSystemFriendlyNameLineEdit, &QLineEdit::textChanged,
|
||||||
this, &KitManagerConfigWidget::setFileSystemFriendlyName);
|
this, &KitManagerConfigWidget::setFileSystemFriendlyName);
|
||||||
|
|
||||||
using namespace Layouting;
|
using namespace Layouting;
|
||||||
Grid {
|
Grid{AlignAsFormLabel(label),
|
||||||
AlignAsFormLabel(label), m_nameEdit, m_iconButton, br,
|
m_nameEdit,
|
||||||
AlignAsFormLabel(label), m_fileSystemFriendlyNameLineEdit
|
m_iconButton,
|
||||||
}.attachTo(this);
|
br,
|
||||||
|
AlignAsFormLabel(fsLabel),
|
||||||
|
m_fileSystemFriendlyNameLineEdit}
|
||||||
|
.attachTo(this);
|
||||||
|
|
||||||
m_iconButton->setToolTip(tr("Kit icon."));
|
m_iconButton->setToolTip(tr("Kit icon."));
|
||||||
auto setIconAction = new QAction(tr("Select Icon..."), this);
|
auto setIconAction = new QAction(tr("Select Icon..."), this);
|
||||||
|
|||||||
@@ -137,8 +137,8 @@ void SanitizerParser::flush()
|
|||||||
setDetailsFormat(m_task, m_linkSpecs);
|
setDetailsFormat(m_task, m_linkSpecs);
|
||||||
static const int maxLen = 50;
|
static const int maxLen = 50;
|
||||||
if (m_task.details.length() > maxLen) {
|
if (m_task.details.length() > maxLen) {
|
||||||
const auto cutOffIt = std::next(m_task.details.begin(), maxLen);
|
auto cutOffIt = std::next(m_task.details.begin(), maxLen);
|
||||||
m_task.details.insert(cutOffIt, "...");
|
cutOffIt = m_task.details.insert(cutOffIt, "...");
|
||||||
m_task.details.erase(std::next(cutOffIt), std::prev(m_task.details.end()));
|
m_task.details.erase(std::next(cutOffIt), std::prev(m_task.details.end()));
|
||||||
}
|
}
|
||||||
scheduleTask(m_task, m_task.details.count());
|
scheduleTask(m_task, m_task.details.count());
|
||||||
|
|||||||
@@ -125,18 +125,6 @@ PropertyName MaterialEditorQmlBackend::auxNamePostFix(const PropertyName &proper
|
|||||||
return propertyName + "__AUX";
|
return propertyName + "__AUX";
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant MaterialEditorQmlBackend::properDefaultAuxiliaryProperties(const QmlObjectNode &qmlObjectNode,
|
|
||||||
const PropertyName &propertyName)
|
|
||||||
{
|
|
||||||
const ModelNode node = qmlObjectNode.modelNode();
|
|
||||||
const PropertyName auxName = propertyName;
|
|
||||||
|
|
||||||
if (node.hasAuxiliaryData(auxName))
|
|
||||||
return node.auxiliaryData(auxName);
|
|
||||||
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
void MaterialEditorQmlBackend::createPropertyEditorValue(const QmlObjectNode &qmlObjectNode,
|
void MaterialEditorQmlBackend::createPropertyEditorValue(const QmlObjectNode &qmlObjectNode,
|
||||||
const PropertyName &name,
|
const PropertyName &name,
|
||||||
const QVariant &value,
|
const QVariant &value,
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ private:
|
|||||||
const PropertyName &name, const QVariant &value,
|
const PropertyName &name, const QVariant &value,
|
||||||
MaterialEditorView *materialEditor);
|
MaterialEditorView *materialEditor);
|
||||||
PropertyName auxNamePostFix(const PropertyName &propertyName);
|
PropertyName auxNamePostFix(const PropertyName &propertyName);
|
||||||
QVariant properDefaultAuxiliaryProperties(const QmlObjectNode &qmlObjectNode, const PropertyName &propertyName);
|
|
||||||
|
|
||||||
QQuickWidget *m_view = nullptr;
|
QQuickWidget *m_view = nullptr;
|
||||||
Internal::QmlAnchorBindingProxy m_backendAnchorBinding;
|
Internal::QmlAnchorBindingProxy m_backendAnchorBinding;
|
||||||
|
|||||||
Reference in New Issue
Block a user