@@ -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
0 commit comments