summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-05-29 15:47:36 -0400
committerNate Sesti <sestinj@gmail.com>2023-05-29 15:47:36 -0400
commit8c00cddb9345daaf2052d3b2650fa136f39813be (patch)
tree111a9cf7236181a1d9cb9bbf5e831f41c2af623e
parent30d83f19da9ac555e97e0741b77cecb0c9f30ed3 (diff)
downloadsncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.tar.gz
sncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.tar.bz2
sncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.zip
Snippet parsing for FasterEditHighlightedCodeStep
-rw-r--r--continuedev/src/continuedev/libs/steps/main.py2
-rw-r--r--continuedev/src/continuedev/models/main.py24
2 files changed, 25 insertions, 1 deletions
diff --git a/continuedev/src/continuedev/libs/steps/main.py b/continuedev/src/continuedev/libs/steps/main.py
index 59df114e..4f4f80e3 100644
--- a/continuedev/src/continuedev/libs/steps/main.py
+++ b/continuedev/src/continuedev/libs/steps/main.py
@@ -191,7 +191,7 @@ class FasterEditHighlightedCodeStep(Step):
replace_me = edit["replace_me"]
replace_with = edit["replace_with"]
file_edits.append(
- FileEdit(filepath=filepath, range=Range.from_snippet_in_file(content=rif_dict[filepath], snippet=replace_me), replacement=replace_with))
+ FileEdit(filepath=filepath, range=Range.from_lines_snippet_in_file(content=rif_dict[filepath], snippet=replace_me), replacement=replace_with))
# ------------------------------
self._edit_diffs = []
diff --git a/continuedev/src/continuedev/models/main.py b/continuedev/src/continuedev/models/main.py
index 5bd65a76..1bc51ff1 100644
--- a/continuedev/src/continuedev/models/main.py
+++ b/continuedev/src/continuedev/models/main.py
@@ -93,6 +93,30 @@ class Range(BaseModel):
end_index = start_index + len(snippet)
return Range.from_indices(content, start_index, end_index)
+ @staticmethod
+ def from_lines_snippet_in_file(content: str, snippet: str) -> "Range":
+ # lines is a substring of the content modulo whitespace on each line
+ content_lines = content.splitlines()
+ snippet_lines = snippet.splitlines()
+
+ start_line = -1
+ end_line = -1
+ looking_for_line = 0
+ for i in range(len(content_lines)):
+ if content_lines[i].strip() == snippet_lines[looking_for_line].strip():
+ if looking_for_line == len(snippet_lines) - 1:
+ start_line = i - len(snippet_lines) + 1
+ end_line = i
+ break
+ looking_for_line += 1
+ else:
+ looking_for_line = 0
+
+ if start_line == -1 or end_line == -1:
+ raise ValueError("Snippet not found in content")
+
+ return Range.from_shorthand(start_line, 0, end_line, len(content_lines[end_line]) - 1)
+
class AbstractModel(ABC, BaseModel):
@root_validator(pre=True)