Commit 57cc2727 authored by Tobias Hunger's avatar Tobias Hunger

CppTools: Add some methods to the JsExpander.

Make some C++ related methods available to the JsExpander. These
are concerned with namespace handling, etc.

Change-Id: I2fc3807cf421b817bb103b727606a78aee290652
Reviewed-by: default avatarNikolai Kosjar <nikolai.kosjar@digia.com>
parent f5d48bf3
......@@ -46,6 +46,7 @@ HEADERS += \
cppsourceprocessor.h \
cpptools_global.h \
cpptoolsconstants.h \
cpptoolsjsextension.h \
cpptoolsplugin.h \
cpptoolsreuse.h \
cpptoolssettings.h \
......@@ -105,6 +106,7 @@ SOURCES += \
cppsemanticinfo.cpp \
cppsemanticinfoupdater.cpp \
cppsourceprocessor.cpp \
cpptoolsjsextension.cpp \
cpptoolsplugin.cpp \
cpptoolsreuse.cpp \
cpptoolssettings.cpp \
......
......@@ -67,6 +67,7 @@ QtcPlugin {
"cpptools.qrc",
"cpptools_global.h",
"cpptoolsconstants.h",
"cpptoolsjsextension.cpp", "cpptoolsjsextension.h",
"cpptoolsplugin.cpp", "cpptoolsplugin.h",
"cpptoolsreuse.cpp", "cpptoolsreuse.h",
"cpptoolssettings.cpp", "cpptoolssettings.h",
......
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#include "cpptoolsjsextension.h"
#include "cppfilesettingspage.h"
#include <coreplugin/icore.h>
#include <utils/codegeneration.h>
#include <utils/fileutils.h>
#include <QFileInfo>
#include <QTextStream>
namespace CppTools {
namespace Internal {
QString CppToolsJsExtension::headerGuard(const QString &in) const
{
return Utils::headerGuard(in);
}
QString CppToolsJsExtension::fileName(const QString &path, const QString &extension) const
{
QString raw = Utils::FileName::fromString(path, extension).toString();
CppFileSettings settings;
settings.fromSettings(Core::ICore::settings());
if (!settings.lowerCaseFiles)
return raw;
QFileInfo fi = QFileInfo(raw);
QString finalPath = fi.path();
if (finalPath == QStringLiteral("."))
finalPath.clear();
if (!finalPath.isEmpty() && !finalPath.endsWith(QLatin1Char('/')))
finalPath += QLatin1Char('/');
QString name = fi.baseName().toLower();
QString ext = fi.completeSuffix();
if (!ext.isEmpty())
ext = QString(QLatin1Char('.')) + ext;
return finalPath + name + ext;
}
static QStringList parts(const QString &klass)
{
return klass.split(QStringLiteral("::"));
}
QStringList CppToolsJsExtension::namespaces(const QString &klass) const
{
QStringList result = parts(klass);
result.removeLast();
return result;
}
QString CppToolsJsExtension::className(const QString &klass) const
{
QStringList result = parts(klass);
return result.last();
}
QString CppToolsJsExtension::classToFileName(const QString &klass, const QString &extension) const
{
return fileName(className(klass), extension);
}
QString CppToolsJsExtension::classToHeaderGuard(const QString &klass, const QString &extension) const
{
return Utils::headerGuard(fileName(className(klass), extension), namespaces(klass));
}
QString CppToolsJsExtension::openNamespaces(const QString &klass) const
{
QString result;
QTextStream str(&result);
Utils::writeOpeningNameSpaces(namespaces(klass), QString(), str);
return result;
}
QString CppToolsJsExtension::closeNamespaces(const QString &klass) const
{
QString result;
QTextStream str(&result);
Utils::writeClosingNameSpaces(namespaces(klass), QString(), str);
return result;
}
} // namespace Internal
} // namespace CppTools
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of Qt Creator.
**
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#ifndef CPPTOOLSJSEXTENSION_H
#define CPPTOOLSJSEXTENSION_H
#include <QObject>
#include <QStringList>
namespace CppTools {
namespace Internal {
/**
* This class extends the JS features in our macro expander.
*/
class CppToolsJsExtension : public QObject
{
Q_OBJECT
public:
CppToolsJsExtension(QObject *parent) : QObject(parent) { }
// Generate header guard:
Q_INVOKABLE QString headerGuard(const QString &in) const;
// Fix the filename casing as configured in C++/File Naming:
Q_INVOKABLE QString fileName(const QString &path, const QString &extension) const;
// Work with classes:
Q_INVOKABLE QStringList namespaces(const QString &klass) const;
Q_INVOKABLE QString className(const QString &klass) const;
Q_INVOKABLE QString classToFileName(const QString &klass,
const QString &extension) const;
Q_INVOKABLE QString classToHeaderGuard(const QString &klass, const QString &extension) const;
Q_INVOKABLE QString openNamespaces(const QString &klass) const;
Q_INVOKABLE QString closeNamespaces(const QString &klass) const;
};
} // namespace Internal
} // namespace CppTools
#endif // CPPTOOLSJSEXTENSION_H
......@@ -38,6 +38,7 @@
#include "cppmodelmanager.h"
#include "cpplocatorfilter.h"
#include "symbolsfindfilter.h"
#include "cpptoolsjsextension.h"
#include "cpptoolssettings.h"
#include "cpptoolsreuse.h"
#include "cppprojectfile.h"
......@@ -48,6 +49,7 @@
#include <coreplugin/coreconstants.h>
#include <coreplugin/documentmanager.h>
#include <coreplugin/icore.h>
#include <coreplugin/jsexpander.h>
#include <coreplugin/variablemanager.h>
#include <coreplugin/vcsmanager.h>
#include <cppeditor/cppeditorconstants.h>
......@@ -144,6 +146,8 @@ bool CppToolsPlugin::initialize(const QStringList &arguments, QString *error)
modelManager->updateSourceFiles(files.toSet());
});
JsExpander::registerQObjectForJs(QLatin1String("Cpp"), new CppToolsJsExtension(this));
CppLocatorData *locatorData = new CppLocatorData;
connect(modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)),
locatorData, SLOT(onDocumentUpdated(CPlusPlus::Document::Ptr)));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment