diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-05-29 15:47:36 -0400 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-05-29 15:47:36 -0400 |
commit | 8c00cddb9345daaf2052d3b2650fa136f39813be (patch) | |
tree | 111a9cf7236181a1d9cb9bbf5e831f41c2af623e | |
parent | 30d83f19da9ac555e97e0741b77cecb0c9f30ed3 (diff) | |
download | sncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.tar.gz sncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.tar.bz2 sncontinue-8c00cddb9345daaf2052d3b2650fa136f39813be.zip |
Snippet parsing for FasterEditHighlightedCodeStep
-rw-r--r-- | continuedev/src/continuedev/libs/steps/main.py | 2 | ||||
-rw-r--r-- | continuedev/src/continuedev/models/main.py | 24 |
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) |