Skip to content

Commit 06801b5

Browse files
committed
refactor(lsp): reduce #include bloat with PIMPL
1 parent c500adf commit 06801b5

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

src/quick-lint-js/lsp/lsp-endpoint.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,11 @@ lsp_endpoint_handler::~lsp_endpoint_handler() = default;
3232

3333
lsp_endpoint::lsp_endpoint(lsp_endpoint_handler* handler,
3434
lsp_endpoint_remote* remote)
35-
: remote_(remote), handler_(handler) {}
35+
: remote_(remote),
36+
handler_(handler),
37+
json_parser_(std::make_unique< ::simdjson::ondemand::parser>()) {}
38+
39+
lsp_endpoint::~lsp_endpoint() = default;
3640

3741
void lsp_endpoint::message_parsed(string8_view message) {
3842
trace_writer* tw =
@@ -53,7 +57,8 @@ void lsp_endpoint::message_parsed(string8_view message) {
5357
reinterpret_cast<const char*>(message.data()), message.size());
5458
::simdjson::ondemand::document message_document;
5559
::simdjson::error_code parse_error;
56-
this->json_parser_.iterate(padded_message).tie(message_document, parse_error);
60+
this->json_parser_->iterate(padded_message)
61+
.tie(message_document, parse_error);
5762
if (parse_error != ::simdjson::error_code::SUCCESS) {
5863
byte_buffer error_json;
5964
this->write_json_parse_error_response(error_json);

src/quick-lint-js/lsp/lsp-endpoint.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#else
1010

1111
#include <cstddef>
12+
#include <memory>
1213
#include <quick-lint-js/assert.h>
1314
#include <quick-lint-js/container/byte-buffer.h>
1415
#include <quick-lint-js/json.h>
@@ -17,8 +18,7 @@
1718
#include <quick-lint-js/port/have.h>
1819
#include <quick-lint-js/port/unreachable.h>
1920
#include <quick-lint-js/port/warning.h>
20-
#include <quick-lint-js/simdjson.h>
21-
#include <simdjson.h>
21+
#include <quick-lint-js/simdjson-fwd.h>
2222
#include <tuple>
2323
#include <utility>
2424
#include <vector>
@@ -114,6 +114,10 @@ class lsp_endpoint : private lsp_message_parser<lsp_endpoint> {
114114
// better.
115115
explicit lsp_endpoint(lsp_endpoint_handler* handler,
116116
lsp_endpoint_remote* remote);
117+
~lsp_endpoint();
118+
119+
lsp_endpoint(const lsp_endpoint&) = delete;
120+
lsp_endpoint& operator=(const lsp_endpoint&) = delete;
117121

118122
using message_parser::append;
119123

@@ -130,9 +134,7 @@ class lsp_endpoint : private lsp_message_parser<lsp_endpoint> {
130134

131135
lsp_endpoint_remote* remote_;
132136
lsp_endpoint_handler* handler_;
133-
// TODO(strager): Make this a pointer so we can avoid #include-ing
134-
// <simdjson.h>.
135-
::simdjson::ondemand::parser json_parser_;
137+
std::unique_ptr< ::simdjson::ondemand::parser> json_parser_;
136138

137139
friend message_parser;
138140
};

src/quick-lint-js/simdjson-fwd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace QUICK_LINT_JS_SIMDJSON_IMPLEMENTATION_NAMESPACE {
2424
namespace ondemand {
2525
class array;
2626
class object;
27+
class parser;
2728
class value;
2829
}
2930
}

0 commit comments

Comments
 (0)