Add tests for directive collections.

This commit is contained in:
ykiko
2024-12-07 16:50:26 +08:00
parent 6af1017d24
commit 1b7e5a6737
13 changed files with 414 additions and 157 deletions

View File

@@ -28,19 +28,22 @@ void adjustInvocation(clang::CompilerInvocation& invocation) {
// FIXME: add more.
}
auto createInstance(llvm::ArrayRef<const char*> args) {
auto createInstance(CompliationParams& params) {
auto instance = std::make_unique<clang::CompilerInstance>();
/// TODO: Figure out `CreateInvocationOptions`.
clang::CreateInvocationOptions options = {};
instance->setInvocation(clang::createInvocation(args, options));
options.VFS = params.vfs;
instance->setInvocation(clang::createInvocation(params.args, options));
/// TODO: use a thread safe filesystem and our customized `DiagnosticConsumer`.
instance->createDiagnostics(
*llvm::vfs::getRealFileSystem(),
*params.vfs,
new clang::TextDiagnosticPrinter(llvm::outs(), new clang::DiagnosticOptions()),
true);
instance->createFileManager(params.vfs);
adjustInvocation(instance->getInvocation());
return instance;
@@ -123,7 +126,7 @@ llvm::Expected<ASTInfo> ExecuteAction(std::unique_ptr<clang::CompilerInstance> i
} // namespace
llvm::Expected<ASTInfo> compile(CompliationParams& params) {
auto instance = createInstance(params.args);
auto instance = createInstance(params);
auto buffer = llvm::MemoryBuffer::getMemBufferCopy(params.content);
instance->getPreprocessorOpts().addRemappedFile(params.path, buffer.release());
@@ -134,7 +137,7 @@ llvm::Expected<ASTInfo> compile(CompliationParams& params) {
}
llvm::Expected<ASTInfo> compile(CompliationParams& params, PCHInfo& out) {
auto instance = createInstance(params.args);
auto instance = createInstance(params);
clang::PreambleBounds bounds = {0, false};
if(params.mainpath.empty() || params.mainpath == params.path) {
@@ -172,7 +175,7 @@ llvm::Expected<ASTInfo> compile(CompliationParams& params, PCHInfo& out) {
}
llvm::Expected<ASTInfo> compile(CompliationParams& params, PCMInfo& out) {
auto instance = createInstance(params.args);
auto instance = createInstance(params);
/// Set options to generate PCM.
instance->getFrontendOpts().OutputFile = params.outpath.str();
@@ -194,7 +197,7 @@ llvm::Expected<ASTInfo> compile(CompliationParams& params, PCMInfo& out) {
}
llvm::Expected<ASTInfo> compile(CompliationParams& params, clang::CodeCompleteConsumer* consumer) {
auto instance = createInstance(params.args);
auto instance = createInstance(params);
/// Set options to run code completion.
instance->getFrontendOpts().CodeCompletionAt.FileName = params.path.str();