1 //===-- ClangdFuzzer.cpp - Fuzz clangd ------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 /// This file implements a function that runs clangd on a single input.
11 /// This function is then linked into the Fuzzer library.
13 //===----------------------------------------------------------------------===//
15 #include "ClangdLSPServer.h"
16 #include "ClangdServer.h"
17 #include "support/ThreadsafeFS.h"
20 using namespace clang::clangd
;
22 extern "C" int LLVMFuzzerTestOneInput(uint8_t *Data
, size_t Size
) {
26 // fmemopen isn't portable, but I think we only run the fuzzer on Linux.
27 std::FILE *In
= fmemopen(Data
, Size
, "r");
28 auto Transport
= newJSONTransport(In
, llvm::nulls(),
29 /*InMirror=*/nullptr, /*Pretty=*/false,
30 /*Style=*/JSONStreamStyle::Delimited
);
32 CodeCompleteOptions CCOpts
;
33 ClangdLSPServer::Options Opts
;
34 Opts
.CodeComplete
.EnableSnippets
= false;
35 Opts
.UseDirBasedCDB
= false;
37 // Initialize and run ClangdLSPServer.
38 ClangdLSPServer
LSPServer(*Transport
, FS
, Opts
);