Merge pull request #2411 from henryhchchc/fix/range-formatting-invalid-range

Handle invalid format range in LSP adapter and add test
diff --git a/verible/verilog/tools/ls/verible-lsp-adapter.cc b/verible/verilog/tools/ls/verible-lsp-adapter.cc
index 84c27d1..91e8e16 100644
--- a/verible/verilog/tools/ls/verible-lsp-adapter.cc
+++ b/verible/verilog/tools/ls/verible-lsp-adapter.cc
@@ -295,6 +295,7 @@
     const verible::Interval<int> format_lines{
         p.range.start.line + 1,  // 1 index based
         p.range.end.line + 1 + last_line_include};
+    if (!format_lines.valid()) return result;
     std::string formatted_range;
     if (!FormatVerilogRange(text, format_style, &formatted_range, format_lines)
              .ok()) {
diff --git a/verible/verilog/tools/ls/verilog-language-server_test.cc b/verible/verilog/tools/ls/verilog-language-server_test.cc
index e4e1e1f..555ab83 100644
--- a/verible/verilog/tools/ls/verilog-language-server_test.cc
+++ b/verible/verilog/tools/ls/verilog-language-server_test.cc
@@ -611,6 +611,14 @@
               params.new_text_end_character)
         << "Invalid range for id:  " << params.id;
   }
+
+  const FormattingRequestParams invalid_formatting_params{
+      34, 6, 0, 1, 1, "  assign a=1;\n", 1, 0, 2, 0};
+  const std::string invalid_request =
+      FormattingRequest("file://fmt.sv", invalid_formatting_params);
+  ASSERT_OK(SendRequest(invalid_request));
+  const json empty_response = json::parse(GetResponse());
+  ASSERT_TRUE(empty_response["result"].empty());
 }
 
 // Runs test of entire document formatting with textDocument/formatting request