summaryrefslogtreecommitdiff
path: root/continuedev
diff options
context:
space:
mode:
Diffstat (limited to 'continuedev')
-rw-r--r--continuedev/src/continuedev/steps/core/core.py40
1 files changed, 14 insertions, 26 deletions
diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py
index d4ccda58..64f53c0f 100644
--- a/continuedev/src/continuedev/steps/core/core.py
+++ b/continuedev/src/continuedev/steps/core/core.py
@@ -271,6 +271,7 @@ class DefaultModelEditCodeStep(Step):
lines = []
unfinished_line = ""
+ red_or_green_first = "green"
current_block_added = []
current_block_removed = []
last_diff_char = " "
@@ -362,9 +363,15 @@ class DefaultModelEditCodeStep(Step):
return True
return False
- def block_not_empty() -> bool:
- nonlocal current_block_added, current_block_removed
- return len(current_block_added) or len(current_block_removed)
+ def should_end_current_block(next_diff_char: str) -> bool:
+ nonlocal current_block_added, current_block_removed, last_diff_char
+ if next_diff_char == " ":
+ return len(current_block_added) or len(current_block_removed)
+ elif next_diff_char == "-":
+ return last_diff_char == "+" and len(current_block_removed)
+ elif next_diff_char == "+":
+ return last_diff_char == "-" and len(current_block_added)
+ raise Exception("Invalid next_diff_char")
async def handle_generated_line(line: str):
nonlocal completion_lines_covered, lines, current_block_added, current_block_removed, offset_from_blocks, original_lines, current_block_start_of_insertion, matched_line, lines_covered_in_this_block, lines_same_in_this_block, current_line_in_file, completion_lines_covered, last_diff_char
@@ -379,37 +386,18 @@ class DefaultModelEditCodeStep(Step):
next_diff_char = diff[current_line_in_file][0]
# If we need to start a new block, end the old one
- if next_diff_char != last_diff_char:
+ if should_end_current_block(next_diff_char):
await show_block_as_suggestion()
-
- if next_diff_char == " ":
- if block_not_empty():
- await show_block_as_suggestion()
-
current_block_start_of_insertion = -1
lines_same_in_this_block += 1
elif next_diff_char == "-":
# Line was removed from the original, add it to the block
- if block_not_empty():
- # Matches something, add all lines up to this as red in the old block, then show the block
- await show_block_as_suggestion()
- # Begin next block!
- lines_same_in_this_block = 0
- lines_covered_in_this_block = 0
- current_block_start_of_insertion = -1
- lines_same_in_this_block += 1
+ await add_red_to_block(line)
+
elif next_diff_char == "+":
# Line was added to the original, add it to the block
-
- if block_not_empty():
- # Matches something, add all lines up to this as red in the old block, then show the block
- await show_block_as_suggestion()
- # Begin next block!
- lines_same_in_this_block = 0
- lines_covered_in_this_block = 0
- current_block_start_of_insertion = -1
- lines_same_in_this_block += 1
+ await add_green_to_block(line)
else:
raise Exception("Unexpected diff character: " +