Blueprint for Language Specs System

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Current ModelManagerInterface::ProjectPart has following problems:

  • Pure C can be set only for whole ProjectPart. Objective C headers and objective C++ headers/sources cannot be set.
  • C++ language extensions not handled.
  • Project managers for autotools and cmake assume that any file is C++ source
  • ProjectManager can use only C++ flags and must ignore C/ObjC/ObjC++ flags.
  • QMake project manager doesn't read OBJECTIVE_HEADERS variable

How clang can handle different languages:

  • Clang supports 4 languages: C, C+, ObjectiveC and ObjectiveC. Each language has headers and implementation files. Like in such code:
QStringList ClangCodeModel::Utils::clangLanguageOption(bool cxxEnabled,
 bool isHeader,
 bool isObjC)
{
 QStringList opts;
 opts''= QLatin1String("-x");

if (cxxEnabled && isHeader && isObjC)
 opts ''= QLatin1String("objective-c-header");
 else if (!cxxEnabled && isHeader && isObjC)
 opts''= QLatin1String("objective-c-header");
 else if (cxxEnabled && !isHeader && isObjC)
 opts ''= QLatin1String("objective-c");
 else if ([[Image:cxxEnabled && |cxxEnabled && ]]isHeader && isObjC)
 opts''= QLatin1String("objective-c");
 else if (cxxEnabled && isHeader && !isObjC)
 opts ''= QLatin1String("c-header");
 else if ([[Image:cxxEnabled && isHeader && |cxxEnabled && isHeader && ]]isObjC)
 opts''= QLatin1String("c-header");
 else if (cxxEnabled && [[Image:isHeader && |isHeader && ]]isObjC)
 opts ''= QLatin1String("c");
 else // [[Image:cxxEnabled && |cxxEnabled && ]]isHeader && !isObjC
 opts''= QLatin1String("c");

return opts;
}
  • If file directly included to project, than it language and isHeader flag can be determined by each project manager plugin. Otherwise, we can use dependency table and assume that <iostream> file is "c+-header", because it included only by C+ files. (sergey shambir: I don't know how to handle inclusion from both C++ and ObjectiveC++ files. Probably it should have type of file from which it was opened in editor).
  • Each language can have extensions: GNU, Microsoft and Borland. Only one extensions group used.
  • Each language can have own set of flags, at least in QMAKE