Skip to content

Commit 505f01b

Browse files
committed
refactor(lsp): factor loop body into its own function
1 parent b2ea747 commit 505f01b

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

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

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -675,36 +675,47 @@ void linting_lsp_server_handler::apply_document_changes(
675675
::simdjson::ondemand::array& changes) {
676676
for (::simdjson::simdjson_result<::simdjson::ondemand::value> change :
677677
changes) {
678-
string8_view change_text;
679-
if (!get_string8(change, "text", &change_text)) {
678+
::simdjson::ondemand::object change_object;
679+
if (change.get(change_object) != ::simdjson::SUCCESS) {
680680
// Ignore invalid change.
681681
continue;
682682
}
683-
::simdjson::ondemand::object raw_range;
684-
bool is_incremental = get_object(change, "range", &raw_range);
685-
if (is_incremental) {
686-
lsp_range range;
687-
688-
::simdjson::ondemand::object start;
689-
if (!(get_object(raw_range, "start", &start) &&
690-
get_int(start, "line", &range.start.line) &&
691-
get_int(start, "character", &range.start.character))) {
692-
// Ignore invalid change.
693-
continue;
694-
}
683+
apply_document_change(doc, change_object);
684+
}
685+
}
695686

696-
::simdjson::ondemand::object end;
697-
if (!(get_object(raw_range, "end", &end) &&
698-
get_int(end, "line", &range.end.line) &&
699-
get_int(end, "character", &range.end.character))) {
700-
// Ignore invalid change.
701-
continue;
702-
}
687+
void linting_lsp_server_handler::apply_document_change(
688+
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)) {
692+
// Ignore invalid change.
693+
return;
694+
}
695+
::simdjson::ondemand::object raw_range;
696+
bool is_incremental = get_object(change, "range", &raw_range);
697+
if (is_incremental) {
698+
lsp_range range;
703699

704-
doc.replace_text(range, change_text);
705-
} else {
706-
doc.set_text(change_text);
700+
::simdjson::ondemand::object start;
701+
if (!(get_object(raw_range, "start", &start) &&
702+
get_int(start, "line", &range.start.line) &&
703+
get_int(start, "character", &range.start.character))) {
704+
// Ignore invalid change.
705+
return;
707706
}
707+
708+
::simdjson::ondemand::object end;
709+
if (!(get_object(raw_range, "end", &end) &&
710+
get_int(end, "line", &range.end.line) &&
711+
get_int(end, "character", &range.end.character))) {
712+
// Ignore invalid change.
713+
return;
714+
}
715+
716+
doc.replace_text(range, change_text);
717+
} else {
718+
doc.set_text(change_text);
708719
}
709720
}
710721

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ class linting_lsp_server_handler final : public lsp_endpoint_handler {
208208

209209
static void apply_document_changes(quick_lint_js::document<lsp_locator>& doc,
210210
::simdjson::ondemand::array& changes);
211+
static void apply_document_change(quick_lint_js::document<lsp_locator>& doc,
212+
::simdjson::ondemand::object& change);
211213

212214
static void write_method_not_found_error_response(
213215
string8_view request_id_json, byte_buffer&);

0 commit comments

Comments
 (0)