Conscience Core
Classes | Namespaces | Functions | Variables
CscCommandMetadataBuilder.cpp File Reference
#include "CscCommandMetadataBuilder.h"
#include <iostream>
#include <memory>
#include <regex>
#include <string>
#include <vector>
#include <sstream>
#include <fstream>
#include "clang/AST/AST.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Frontend/FrontendAction.h"
#include <clang/AST/Type.h>
#include "clang/AST/Comment.h"
#include "clang/AST/CommentParser.h"
#include "clang/AST/CommentSema.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/LLVM.h"
#include "clang/Driver/DriverDiagnostic.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Frontend/FrontendActions.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/CompilationDatabase.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Path.h"
#include "llvm/TargetParser/Host.h"
#include <Bridging/EnvironmentInteractionCommands/CommandParamsSpec.h>
#include <Bridging/EnvironmentInteractionCommands/Result/CommandResultSpec.h>
#include <Configuration/CscKeyDirectories.h>
#include <Util/crypto.h>
#include <Util/fs.h>
#include <Util/json.h>
#include <Util/os.h>

Classes

struct  conscience_core::bridging::commands::metadata::CscConstructorDoc
 
struct  conscience_core::bridging::commands::metadata::CscCommandMetadataObjects
 
struct  conscience_core::bridging::commands::metadata::CscCommandMetadataParserContext
 
class  conscience_core::bridging::commands::metadata::ClassASTVisitor
 
class  conscience_core::bridging::commands::metadata::ClassASTConsumer
 
class  conscience_core::bridging::commands::metadata::IncludeTracer
 
class  conscience_core::bridging::commands::metadata::ClassFrontendAction
 
struct  conscience_core::bridging::commands::metadata::CscJsonCacheData
 

Namespaces

 conscience_core
 
 conscience_core::bridging
 
 conscience_core::bridging::commands
 
 

Functions

static unique_ptr< CscLoggerconscience_core::bridging::commands::metadata::initLogger ()
 
string conscience_core::bridging::commands::metadata::getDeclaringHeaderFilePath (const clang::TypeDecl &objectType, clang::ASTContext &astContext)
 
static const CscCommandDataTypeNodeMetadataconscience_core::bridging::commands::metadata::createMetadataForType (const clang::QualType &type, const string &name, const string &doc, CscCommandMetadataParserContext *context, bool useFieldsRatherThanConstructorForObjects, bool noFallbackOnObjectType)
 
string conscience_core::bridging::commands::metadata::collectDocText (clang::comments::Comment *comment, string &docStr)
 
string conscience_core::bridging::commands::metadata::collectDocText (clang::comments::Comment *comment)
 
vector< string > conscience_core::bridging::commands::metadata::getParamTypesAsPureCode (const clang::CXXConstructorDecl *ctor, const clang::ASTContext &astContext)
 
string conscience_core::bridging::commands::metadata::collectDocText (clang::comments::FullComment *fullComment)
 
static bool conscience_core::bridging::commands::metadata::isStdString (const clang::QualType &originalType)
 
const CscEnumInfosconscience_core::bridging::commands::metadata::getEnumInfos (const clang::QualType &rawT, const CscCommandMetadataParserContext *context)
 
const CscEnumInfosconscience_core::bridging::commands::metadata::getEnumInfosByQualifiedName (const string &qualifiedName)
 
string conscience_core::bridging::commands::metadata::qualifiedNameToSimpleName (const string &enumQualifiedName)
 
void conscience_core::bridging::commands::metadata::createEnumInfos (const string &enumQualifiedName, const string &doc, const map< string, unsigned long long > &values, const map< string, string > &valuesDoc, const string &headerRelativePath)
 
CscConstructorDoc conscience_core::bridging::commands::metadata::collectDoc (const clang::FunctionDecl *funcDecl, const clang::ASTContext &context)
 
vector< clang::QualType > conscience_core::bridging::commands::metadata::extractClassTemplateArgQualType (const clang::QualType &T)
 
static pair< string, vector< clang::QualType > > conscience_core::bridging::commands::metadata::getTemplateInfo (const clang::QualType &T)
 
static clang::QualType conscience_core::bridging::commands::metadata::getStrippedType (clang::QualType T)
 Retire const, reference, pointer, etc. pour arriver au “noyau” du type. More...
 
string conscience_core::bridging::commands::metadata::getSourceCode (const clang::DeclaratorDecl *ctorDecl, const clang::ASTContext &context)
 
string conscience_core::bridging::commands::metadata::getFunctionSignature (const clang::CXXMethodDecl *methodDecl, clang::ASTContext &context)
 
optional< string > conscience_core::bridging::commands::metadata::getStringLiteral (const clang::Expr *initExpr, clang::ASTContext &context)
 
clang::CXXConstructorDecl * conscience_core::bridging::commands::metadata::getMostRelevantConstructor (clang::CXXRecordDecl *objectType, clang::ASTContext &context)
 
const CscCommandDataTypeMetadataconscience_core::bridging::commands::metadata::createOrUpdateObjectMetadata (const string &headerFileRelativePath, const string &classQualifiedName, const string &classSimpleName, const string &doc, CscCommandMetadataParserContext *context, const vector< const CscCommandDataTypeNodeMetadata * > &paramsMetadata, bool registerTypeInCache)
 
const CscCommandDataTypeMetadataconscience_core::bridging::commands::metadata::createMetaTypeForObjectTypeUsingConstructor (clang::CXXRecordDecl *objectType, CscCommandMetadataParserContext *context, bool registerTypeInCache=true)
 
const CscCommandDataTypeMetadataconscience_core::bridging::commands::metadata::createMetaTypeForObjectTypeUsingPublicFieldsAndGetters (clang::CXXRecordDecl *objectType, CscCommandMetadataParserContext *context)
 
const CscCommandDataTypeMetadataconscience_core::bridging::commands::metadata::createMetaTypeForObjectType (const clang::QualType &objectType, CscCommandMetadataParserContext *context)
 
const CscCommandDataTypeNodeMetadataconscience_core::bridging::commands::metadata::createParamMetaTypeForObjectType (const string &name, const string &doc, const clang::QualType &objectType, CscCommandMetadataParserContext *context, bool useFieldsRatherThanConstructorForObjects, CscCommandPtrType ptrType)
 
static optional< clang::QualType > conscience_core::bridging::commands::metadata::isSharedPtr (const clang::QualType &rawT)
 
static optional< clang::QualType > conscience_core::bridging::commands::metadata::isUniquePtr (const clang::QualType &rawT)
 
static optional< clang::QualType > conscience_core::bridging::commands::metadata::isSmartPtr (const clang::QualType &rawT)
 
bool conscience_core::bridging::commands::metadata::isCppType (const clang::QualType &type)
 
const CscCommandDataTypeNodeMetadataconscience_core::bridging::commands::metadata::createMetadataForPtrType (const clang::QualType &type, const string &name, const string &doc, CscCommandMetadataParserContext *context, bool useFieldsRatherThanConstructorForObjects, CscCommandPtrType ptrType)
 
bool conscience_core::bridging::commands::metadata::isCommandClass (clang::CXXRecordDecl *decl)
 
const CscCommandResultMetadataconscience_core::bridging::commands::metadata::buildResultMetadata (const clang::CXXMethodDecl *executeMethod, CscCommandMetadataParserContext *context)
 
string conscience_core::bridging::commands::metadata::normalizeWhitespace (const string &input)
 
void conscience_core::bridging::commands::metadata::trimSpacesFrom (string &s, size_t start)
 
vector< string > conscience_core::bridging::commands::metadata::getCompilationArgsForWindows (const vector< string > &requestedArgsPrefixes, bool adjustLlvmPaths)
 
vector< string > conscience_core::bridging::commands::metadata::getCompilationArgsFromCompileCommandsJson (const vector< string > &requestedArgsPrefixes, bool adjustLlvmPaths)
 
static llvm::cl::OptionCategory conscience_core::bridging::commands::metadata::clangToolCategory ("class-info-extractor options")
 
const CscCommandDataTypeNodeMetadataconscience_core::bridging::commands::metadata::getTypeNodeFromJson (const string &paramName, CscJsonObjectReader &paramJson)
 
CscCommandDataTypeMetadataconscience_core::bridging::commands::metadata::getTypeFromJson (CscJsonObjectReader &typeJson, optional< string > commandId={})
 
bool conscience_core::bridging::commands::metadata::isAnyDependentTypeOrEnumInModifiedList (CscJsonObjectReader &typeJson, const vector< string > &modifiedEnumQualifiedNames, const vector< string > &modifiedTypeQualifiedNames)
 
CscJsonObjectconscience_core::bridging::commands::metadata::loadJsonCache (const fs::path &cacheFile)
 
CscJsonObjectconscience_core::bridging::commands::metadata::getJsonForTypeNode (const CscCommandDataTypeNodeMetadata *typeNode, CscJsonCacheData *cacheData)
 
void conscience_core::bridging::commands::metadata::setHeaderRelativePathInJson (string &relativePath, CscJsonObject &json, const string &commandId)
 
CscJsonObjectconscience_core::bridging::commands::metadata::getJsonForType (const string &commandId, const CscCommandDataTypeMetadata *typeMetadata, CscJsonCacheData *cacheData=nullptr)
 

Variables

static bool conscience_core::bridging::commands::metadata::CLANG_DEBUG_AND_WARNINGS = false
 
static string conscience_core::bridging::commands::metadata::COMMAND_BASE_CLASS_QUALIFIED_NAME = "conscience_core::bridging::commands::CscCommand"
 
static string conscience_core::bridging::commands::metadata::COMMAND_EXECUTE_METHOD_NAME = "doExecute"
 
static string conscience_core::bridging::commands::metadata::CACHE_KEY_TYPES = "types"
 
static string conscience_core::bridging::commands::metadata::CACHE_KEY_COMMANDS = "commands"
 
static string conscience_core::bridging::commands::metadata::CACHE_KEY_ENUMS = "enums"
 
static auto conscience_core::bridging::commands::metadata::logger = initLogger()
 
static map< string, const CscEnumInfos * > conscience_core::bridging::commands::metadata::enumInfos
 
static const string conscience_core::bridging::commands::metadata::COMMAND_RESULT_CLASS_PREFIX = "CscCommandExecutionResult"
 
static const vector< string > conscience_core::bridging::commands::metadata::ignoredCommandFilenames