Skip to content

Commit 42265db

Browse files
committed
refactor(lsp): split function into parsing func + logic func
1 parent 505f01b commit 42265db

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -686,16 +686,15 @@ void linting_lsp_server_handler::apply_document_changes(
686686

687687
void linting_lsp_server_handler::apply_document_change(
688688
quick_lint_js::document<lsp_locator>& doc,
689-
::simdjson::ondemand::object& change) {
690-
string8_view change_text;
691-
if (!get_string8(change, "text", &change_text)) {
689+
::simdjson::ondemand::object& raw_change) {
690+
lsp_document_change change;
691+
if (!get_string8(raw_change, "text", &change.text)) {
692692
// Ignore invalid change.
693693
return;
694694
}
695695
::simdjson::ondemand::object raw_range;
696-
bool is_incremental = get_object(change, "range", &raw_range);
697-
if (is_incremental) {
698-
lsp_range range;
696+
if (get_object(raw_change, "range", &raw_range)) {
697+
lsp_range& range = change.range.emplace();
699698

700699
::simdjson::ondemand::object start;
701700
if (!(get_object(raw_range, "start", &start) &&
@@ -712,10 +711,18 @@ void linting_lsp_server_handler::apply_document_change(
712711
// Ignore invalid change.
713712
return;
714713
}
714+
}
715+
716+
apply_document_change(doc, change);
717+
}
715718

716-
doc.replace_text(range, change_text);
719+
void linting_lsp_server_handler::apply_document_change(
720+
quick_lint_js::document<lsp_locator>& doc,
721+
const lsp_document_change& change) {
722+
if (change.range.has_value()) {
723+
doc.replace_text(*change.range, change.text);
717724
} else {
718-
doc.set_text(change_text);
725+
doc.set_text(change.text);
719726
}
720727
}
721728

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,17 @@ class linting_lsp_server_handler final : public lsp_endpoint_handler {
206206
loaded_config_file*,
207207
byte_buffer& out_json);
208208

209+
struct lsp_document_change {
210+
string8_view text;
211+
// If a range is not provided, the document's text is entirely replaced.
212+
std::optional<lsp_range> range;
213+
};
209214
static void apply_document_changes(quick_lint_js::document<lsp_locator>& doc,
210215
::simdjson::ondemand::array& changes);
211216
static void apply_document_change(quick_lint_js::document<lsp_locator>& doc,
212-
::simdjson::ondemand::object& change);
217+
::simdjson::ondemand::object& raw_change);
218+
static void apply_document_change(quick_lint_js::document<lsp_locator>& doc,
219+
const lsp_document_change& change);
213220

214221
static void write_method_not_found_error_response(
215222
string8_view request_id_json, byte_buffer&);

0 commit comments

Comments
 (0)