Conscience Core
CscCommandMetadataBuilder.h
Go to the documentation of this file.
1 //
2 // Created by Louis Grignon on 14/01/2025.
3 //
4 
5 #ifndef CSCCOMMANDMETADATABUILDER_H
6 #define CSCCOMMANDMETADATABUILDER_H
7 
8 #pragma region includes
9 #include <map>
10 #include <any>
11 #include <string>
12 #include <sstream>
13 #include <iostream>
14 #include <optional>
15 #include <vector>
16 #include <functional>
17 #include <filesystem>
18 #include <Util/os.h>
19 
21 class CscJsonObject;
22 }
24 class CscCommandDataTypeMetadata;
25 struct CscEnumInfos;
26 namespace result {
28 }
29 }
30 using std::map, std::any, std::vector, std::cout, std::endl, std::string, std::to_string, std::optional;
31 namespace fs = std::filesystem;
32 using namespace conscience_utils::JSON;
34 #pragma endregion includes
35 
41 
42 inline static const string CORE_COMMANDS_DIR_RELATIVE_PATH = "Bridging/EnvironmentInteractionCommands";
43 
45  const string commandId;
46  const string classSimpleName;
47  const string classQualifiedName;
48  bool hasGeneratedParamsMetadata = false;
49  bool hasGeneratedResultMetadata = false;
50 
54  vector<string> commandParamTypes;
55 
56  CscCommandMetadataBuilderResultItem(const string &commandId, const string &classSimpleName, const string &classQualifiedName);
57 
58  string toString() const;
59 };
60 
62 
63  vector<CscCommandMetadataBuilderResultItem *> items;
64 
69  map<string, vector<string>> typeNameToParamsTypes;
70 
74  map<string, vector<string>> resultTypeQualifiedNameToFieldsTypes;
75 
77 
78  string toString() const;
79 };
80 
82 private:
83  CscJsonObject *jsonPersistence = nullptr;
84 
85 public:
86  CscCommandMetadataCacheBuilder(const optional<fs::path> &initCacheFromPath = {});
88 
89  void pushCommand(const string &commandId, const CscCommandDataTypeMetadata *typeMetadata, const CscCommandResultMetadata *resultMetadata);
90 
94  void pushType(const string &commandId, const string &typeFullName, const CscCommandDataTypeMetadata *typeMetadata);
95 
99  void pushEnum(const string &commandId, const CscEnumInfos *enumInfos);
100 
105  void saveCacheTo(const fs::path &path, bool merge = true);
106 };
107 
122 public:
128  void generateAllCommandMetadataFromCommandHeadersDir(const fs::path &commandsDir, const vector<fs::path> &excludedHeaderFiles, const optional<fs::path> &cachePath = {});
134  void generateCommandMetadataFromCommandHeaders(const vector<fs::path> &commandsHeaders, const vector<fs::path> &excludedHeaderFiles, const optional<fs::path> &cachePath = {});
135 
139  vector<fs::path> restoreCommandMetadataFromCacheFile(const fs::path &cacheFile);
140 
141  CscCommandMetadataBuilderResult *generateCommandMetadataForHeader(const fs::path &headerPath, CscCommandMetadataCacheBuilder *cacheBuilder = nullptr);
142 
144  virtual ~CscCommandMetadataBuilder();
145  static CscCommandMetadataBuilder *getInstance();
146 
147 private:
148  vector<const char *> *compilationArgsCache = nullptr;
149  const vector<const char *> &getCompilationArgs();
150  inline static CscCommandMetadataBuilder *instance = nullptr;
151 };
152 
153 static const vector<string> COMPILATION_ARGS_PREFIX_ALL = {"-resource-dir", "-isysroot", "-isystem", "-I", "-D", "-mmacosx", "-std", "-arch"};
154 CSC_DLL_IMPORTEXPORT vector<string> getCompilationArgsFromCompileCommandsJson(const vector<string> &requestedArgsPrefixes, bool adjustLlvmPaths = true);
155 
156 }
157 
158 #endif
os.h
nlohmann::to_string
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition: json.hpp:26470
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResultItem::classQualifiedName
const string classQualifiedName
Definition: CscCommandMetadataBuilder.h:47
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResult::resultTypeQualifiedNameToFieldsTypes
map< string, vector< string > > resultTypeQualifiedNameToFieldsTypes
Maps each result type (fully qualified) to the field names extracted from its structure.
Definition: CscCommandMetadataBuilder.h:74
conscience_core::bridging::commands::CscCommandDataTypeMetadata
Definition: CommandParamsSpec.h:293
conscience_core::bridging::commands::metadata::CscCommandMetadataCacheBuilder
Definition: CscCommandMetadataBuilder.h:81
conscience_core::bridging::commands::metadata::getCompilationArgsFromCompileCommandsJson
vector< string > getCompilationArgsFromCompileCommandsJson(const vector< string > &requestedArgsPrefixes, bool adjustLlvmPaths)
Definition: CscCommandMetadataBuilder.cpp:1503
conscience_core::bridging::commands::result
Definition: CscCommandMetadataBuilder.h:26
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResultItem::commandParamTypes
vector< string > commandParamTypes
List of constructor parameter types used in the command.
Definition: CscCommandMetadataBuilder.h:54
conscience_core::bridging::commands::metadata
Definition: CscCommandMetadataBuilder.cpp:58
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResult::items
vector< CscCommandMetadataBuilderResultItem * > items
Definition: CscCommandMetadataBuilder.h:63
conscience_core::bridging::commands::result::CscCommandResultMetadata
Definition: CommandResultSpec.h:17
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResultItem
Definition: CscCommandMetadataBuilder.h:44
conscience_core::bridging::commands
Definition: cartographyCommands.cpp:4
conscience_utils::JSON
Definition: CscCommandMetadataBuilder.h:20
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResult::typeNameToParamsTypes
map< string, vector< string > > typeNameToParamsTypes
Maps each fully qualified type (used in command constructors or in other types) to the parameter name...
Definition: CscCommandMetadataBuilder.h:69
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResult
Definition: CscCommandMetadataBuilder.h:61
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResultItem::commandId
const string commandId
Definition: CscCommandMetadataBuilder.h:45
conscience_server::entities::instance
ServerEntities * instance
Definition: ServerEntities.cpp:39
conscience_core::bridging::commands::CscEnumInfos
Definition: CommandParamsSpec.h:127
conscience_core::bridging::commands::metadata::enumInfos
static map< string, const CscEnumInfos * > enumInfos
Definition: CscCommandMetadataBuilder.cpp:204
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilderResultItem::classSimpleName
const string classSimpleName
Definition: CscCommandMetadataBuilder.h:46
conscience_core::bridging::commands::metadata::COMPILATION_ARGS_PREFIX_ALL
static const vector< string > COMPILATION_ARGS_PREFIX_ALL
Definition: CscCommandMetadataBuilder.h:153
conscience_utils::JSON::CscJsonObject
Definition: json.h:494
conscience_core::bridging::commands::metadata::CORE_COMMANDS_DIR_RELATIVE_PATH
static const string CORE_COMMANDS_DIR_RELATIVE_PATH
Definition: CscCommandMetadataBuilder.h:42
conscience_core::bridging::commands::metadata::CscCommandMetadataBuilder
Definition: CscCommandMetadataBuilder.h:121