diff options
author | Francois Ferrand <thetypz@gmail.com> | 2016-02-26 18:48:39 +0100 |
---|---|---|
committer | Francois Ferrand <thetypz@gmail.com> | 2016-08-23 12:35:04 +0000 |
commit | 7b2c09a1186f2cf69f276017ba08da89560f55be (patch) | |
tree | e336ae35ba2779b4051d1fcdfb9003b40792b88a /src/plugins/cpptools | |
parent | 285c8a7543aae0d71949451f04c99a4924900104 (diff) | |
download | qt-creator-7b2c09a1186f2cf69f276017ba08da89560f55be.tar.gz |
C++: Disable C++ keywords in C files
In some (legacy) C files, new and delete may be used for regular identifier.
There are some limitations:
* Header files have no 'implicit' type, and may be parsed as C++ or ObjC depending on the
other files in the project.
* QMakeProject use a single ProjectPart for C and C++ files, so there will still be the issue.
Change-Id: Iec11687b35f7ccf1e7c0d091b143ae90d950e440
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r-- | src/plugins/cpptools/cppcodeformatter.cpp | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpartbuilder.cpp | 13 |
3 files changed, 10 insertions, 7 deletions
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 0d3586dcd1..e27832a2ff 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -1066,6 +1066,7 @@ int CodeFormatter::tokenizeBlock(const QTextBlock &block, bool *endedJoined) features.qtEnabled = true; features.qtMocRunEnabled = true; features.qtKeywordsEnabled = true; + features.cxxEnabled = true; features.objCEnabled = true; SimpleLexer tokenize; diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp index e091c50483..85ea324c9f 100644 --- a/src/plugins/cpptools/projectpart.cpp +++ b/src/plugins/cpptools/projectpart.cpp @@ -45,6 +45,9 @@ void ProjectPart::updateLanguageFeatures() { const bool hasQt = qtVersion != NoQt; languageFeatures.cxx11Enabled = languageVersion >= CXX11; + languageFeatures.cxxEnabled = languageVersion >= CXX98; + languageFeatures.c99Enabled = languageVersion >= C99; + languageFeatures.objCEnabled = languageExtensions & ObjectiveCExtensions; languageFeatures.qtEnabled = hasQt; languageFeatures.qtMocRunEnabled = hasQt; if (!hasQt) { diff --git a/src/plugins/cpptools/projectpartbuilder.cpp b/src/plugins/cpptools/projectpartbuilder.cpp index 224f0678f8..b01795f9cf 100644 --- a/src/plugins/cpptools/projectpartbuilder.cpp +++ b/src/plugins/cpptools/projectpartbuilder.cpp @@ -208,11 +208,11 @@ void ProjectPartBuilder::setConfigFileName(const QString &configFileName) QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList &files, FileClassifier fileClassifier) { - QList<Core::Id> languages; + QSet<Core::Id> languages; ProjectFileCategorizer cat(m_templatePart->displayName, files, fileClassifier); if (cat.hasNoParts()) - return languages; + return languages.toList(); using CppTools::ProjectFile; using CppTools::ProjectPart; @@ -223,7 +223,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList ProjectPart::C11, ProjectPart::NoExtensions); // TODO: there is no C... -// languages += ProjectExplorer::Constants::LANG_C; + languages += ProjectExplorer::Constants::LANG_CXX; } if (cat.hasObjcSources()) { createProjectPart(cat.objcSources(), @@ -231,7 +231,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList ProjectPart::C11, ProjectPart::ObjectiveCExtensions); // TODO: there is no Ojective-C... -// languages += ProjectExplorer::Constants::LANG_OBJC; + languages += ProjectExplorer::Constants::LANG_CXX; } if (cat.hasCxxSources()) { createProjectPart(cat.cxxSources(), @@ -249,7 +249,7 @@ QList<Core::Id> ProjectPartBuilder::createProjectPartsForFiles(const QStringList languages += ProjectExplorer::Constants::LANG_CXX; } - return languages; + return languages.toList(); } namespace { @@ -316,8 +316,6 @@ void ProjectPartBuilder::evaluateProjectPartToolchain( languageVersion = ProjectPart::CXX11; else if (flags & ToolChain::StandardCxx98) languageVersion = ProjectPart::CXX98; - else - languageVersion = ProjectPart::CXX11; auto &languageExtensions = projectPart->languageExtensions; @@ -357,6 +355,7 @@ void ProjectPartBuilder::createProjectPart(const QVector<ProjectFile> &theSource ProjectPart::Ptr part(m_templatePart->copy()); part->displayName = partName; part->files = theSources; + part->languageVersion = languageVersion; QTC_ASSERT(part->project, return); if (ProjectExplorer::Target *activeTarget = part->project->activeTarget()) { |