This is an automated email from the ASF dual-hosted git repository.

jpoth pushed a commit to branch CAMEL-21945
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fc0f01023ef1efd4d0e84c4e691b9de9eb4630ae
Author: John Poth <poth.j...@gmail.com>
AuthorDate: Mon Apr 14 15:13:32 2025 +0200

    CAMEL-21945 camel-jbang: upgrade camel-language-server, move cursor after 
insert
---
 .../jbang/core/commands/CamelNanoLspEditor.java    | 64 +++++++++++++---------
 parent/pom.xml                                     |  2 +-
 2 files changed, 39 insertions(+), 27 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelNanoLspEditor.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelNanoLspEditor.java
index 1139888d099..ddef641eab6 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelNanoLspEditor.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelNanoLspEditor.java
@@ -3190,33 +3190,45 @@ public class CamelNanoLspEditor implements Editor {
         }
         CompletionItem item = lines.get(this.suggestionBox.getSelected());
         Either<TextEdit, InsertReplaceEdit> textEdit = item.getTextEdit();
-        TextEdit left = textEdit.getLeft();
-        Range range = left.getRange();
-        Position start = range.getStart();
-        int endLine = start.getLine();
-        Position end = range.getEnd();
-        int startLine = end.getLine();
-        if (startLine == endLine) {
+        if (textEdit != null) {
+            TextEdit left = textEdit.getLeft();
+            Range range = left.getRange();
+            Position start = range.getStart();
+            int endLine = start.getLine();
+            Position end = range.getEnd();
+            int startLine = end.getLine();
+            if (startLine == endLine) {
+                StringBuilder newLine = new StringBuilder();
+                String line = this.buffer.lines.get(startLine);
+                newLine.append(line, 0, start.getCharacter());
+                newLine.append(left.getNewText());
+                newLine.append(line.substring(end.getCharacter()));
+                this.buffer.lines.set(startLine, newLine.toString());
+                this.buffer.moveRight(left.getNewText().length());
+            } else {
+                // first line
+                StringBuilder newFirstLine = new StringBuilder();
+                String oldFirstLine = this.buffer.lines.get(startLine);
+                String newText = left.getNewText();
+                newFirstLine.append(oldFirstLine, 0, start.getCharacter());
+                newFirstLine.append(newText, 0, oldFirstLine.length() - 
start.getCharacter());
+                this.buffer.lines.set(startLine, newFirstLine.toString());
+                // second line
+                StringBuilder newSecondLine = new StringBuilder();
+                String oldSecondLine = this.buffer.lines.get(endLine);
+                newSecondLine.append(newText, oldFirstLine.length() - 
start.getCharacter(), end.getCharacter());
+                newSecondLine.append(oldSecondLine, end.getCharacter(), 
end.getCharacter());
+                this.buffer.lines.set(endLine, newSecondLine.toString());
+                this.buffer.moveRight(left.getNewText().length());
+            }
+        } else if (!Strings.isEmpty(item.getInsertText()) || 
!Strings.isEmpty(item.getLabel())) {
+            String insert = Strings.isEmpty(item.getInsertText()) ? 
item.getLabel() : item.getInsertText();
             StringBuilder newLine = new StringBuilder();
-            String line = this.buffer.lines.get(startLine);
-            newLine.append(line, 0, start.getCharacter());
-            newLine.append(left.getNewText());
-            newLine.append(line.substring(end.getCharacter()));
-            this.buffer.lines.set(startLine, newLine.toString());
-        } else {
-            // first line
-            StringBuilder newFirstLine = new StringBuilder();
-            String oldFirstLine = this.buffer.lines.get(startLine);
-            String newText = left.getNewText();
-            newFirstLine.append(oldFirstLine, 0, start.getCharacter());
-            newFirstLine.append(newText, 0, oldFirstLine.length() - 
start.getCharacter());
-            this.buffer.lines.set(startLine, newFirstLine.toString());
-            // second line
-            StringBuilder newSecondLine = new StringBuilder();
-            String oldSecondLine = this.buffer.lines.get(endLine);
-            newSecondLine.append(newText, oldFirstLine.length() - 
start.getCharacter(), end.getCharacter());
-            newSecondLine.append(oldSecondLine, end.getCharacter(), 
end.getCharacter());
-            this.buffer.lines.set(endLine, newSecondLine.toString());
+            String line = this.buffer.lines.get(buffer.line);
+            newLine.append(line, 0, buffer.offsetInLine + buffer.column);
+            newLine.append(insert);
+            this.buffer.lines.set(buffer.line, newLine.toString());
+            this.buffer.moveRight(insert.length());
         }
         this.buffer.dirty = true;
     }
diff --git a/parent/pom.xml b/parent/pom.xml
index bf5a7cd1509..13122b9ac88 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -90,7 +90,7 @@
         <caffeine-version>3.2.0</caffeine-version>
         <californium-version>3.14.0</californium-version>
         <californium-scandium-version>3.11.0</californium-scandium-version>
-        <camel-lsp-version>1.30.0-SNAPSHOT</camel-lsp-version>
+        <camel-lsp-version>1.31.0</camel-lsp-version>
         <camunda-version>7.23.0</camunda-version>
         <cassandra-driver-version>4.19.0</cassandra-driver-version>
         <jta-api-1.2-version>1.2</jta-api-1.2-version>

Reply via email to