mirror of
https://github.com/tiennm99/serena.git
synced 2026-07-16 20:18:31 +00:00
Add retrieve_content_around_line to Project (keeping LS version, too, for the time being),
such that FindReferencingSymbolsTool is now also implemented without a direct reference to the language server All references to Component.language_server have been removed
This commit is contained in:
committed by
Dominik Jain
parent
0057cbef4e
commit
ce9a4ef195
@@ -79,20 +79,22 @@ class TestLanguageServerBasics:
|
||||
references = language_server.request_references(file_path, sel_start["line"], sel_start["character"])
|
||||
assert len(references) > 1, "Should get valid references for create_user (using selectionRange if present)"
|
||||
|
||||
@pytest.mark.parametrize("language_server", [Language.PYTHON], indirect=True)
|
||||
def test_retrieve_content_around_line(self, language_server: SolidLanguageServer) -> None:
|
||||
|
||||
class TestProjectBasics:
|
||||
@pytest.mark.parametrize("project", [Language.PYTHON], indirect=True)
|
||||
def test_retrieve_content_around_line(self, project: Project) -> None:
|
||||
"""Test retrieve_content_around_line functionality with various scenarios."""
|
||||
file_path = os.path.join("test_repo", "models.py")
|
||||
|
||||
# Scenario 1: Just a single line (User class definition)
|
||||
line_31 = language_server.retrieve_content_around_line(file_path, 31)
|
||||
line_31 = project.retrieve_content_around_line(file_path, 31)
|
||||
assert len(line_31.lines) == 1
|
||||
assert "class User(BaseModel):" in line_31.lines[0].line_content
|
||||
assert line_31.lines[0].line_number == 31
|
||||
assert line_31.lines[0].match_type == LineType.MATCH
|
||||
|
||||
# Scenario 2: Context above and below
|
||||
with_context_around_user = language_server.retrieve_content_around_line(file_path, 31, 2, 2)
|
||||
with_context_around_user = project.retrieve_content_around_line(file_path, 31, 2, 2)
|
||||
assert len(with_context_around_user.lines) == 5
|
||||
# Check line content
|
||||
assert "class User(BaseModel):" in with_context_around_user.matched_lines[0].line_content
|
||||
@@ -112,7 +114,7 @@ class TestLanguageServerBasics:
|
||||
assert with_context_around_user.lines[4].match_type == LineType.AFTER_MATCH
|
||||
|
||||
# Scenario 3a: Only context above
|
||||
with_context_above = language_server.retrieve_content_around_line(file_path, 31, 3, 0)
|
||||
with_context_above = project.retrieve_content_around_line(file_path, 31, 3, 0)
|
||||
assert len(with_context_above.lines) == 4
|
||||
assert "return cls(id=id, name=name)" in with_context_above.lines[0].line_content
|
||||
assert "class User(BaseModel):" in with_context_above.matched_lines[0].line_content
|
||||
@@ -129,7 +131,7 @@ class TestLanguageServerBasics:
|
||||
assert with_context_above.lines[3].match_type == LineType.MATCH
|
||||
|
||||
# Scenario 3b: Only context below
|
||||
with_context_below = language_server.retrieve_content_around_line(file_path, 31, 0, 3)
|
||||
with_context_below = project.retrieve_content_around_line(file_path, 31, 0, 3)
|
||||
assert len(with_context_below.lines) == 4
|
||||
assert "class User(BaseModel):" in with_context_below.matched_lines[0].line_content
|
||||
assert with_context_below.num_matched_lines == 1
|
||||
@@ -144,7 +146,7 @@ class TestLanguageServerBasics:
|
||||
assert with_context_below.lines[3].match_type == LineType.AFTER_MATCH
|
||||
|
||||
# Scenario 4a: Edge case - context above but line is at 0
|
||||
first_line_with_context_around = language_server.retrieve_content_around_line(file_path, 0, 2, 1)
|
||||
first_line_with_context_around = project.retrieve_content_around_line(file_path, 0, 2, 1)
|
||||
assert len(first_line_with_context_around.lines) <= 4 # Should have at most 4 lines (line 0 + 1 below + up to 2 above)
|
||||
assert first_line_with_context_around.lines[0].line_number <= 2 # First line should be at most line 2
|
||||
# Check match type for the target line
|
||||
@@ -157,7 +159,7 @@ class TestLanguageServerBasics:
|
||||
assert line.match_type == LineType.AFTER_MATCH
|
||||
|
||||
# Scenario 4b: Edge case - context above but line is at 1
|
||||
second_line_with_context_above = language_server.retrieve_content_around_line(file_path, 1, 3, 1)
|
||||
second_line_with_context_above = project.retrieve_content_around_line(file_path, 1, 3, 1)
|
||||
assert len(second_line_with_context_above.lines) <= 5 # Should have at most 5 lines (line 1 + 1 below + up to 3 above)
|
||||
assert second_line_with_context_above.lines[0].line_number <= 1 # First line should be at most line 1
|
||||
# Check match type for the target line
|
||||
@@ -171,10 +173,10 @@ class TestLanguageServerBasics:
|
||||
|
||||
# Scenario 4c: Edge case - context below but line is at the end of file
|
||||
# First get the total number of lines in the file
|
||||
all_content = language_server.retrieve_full_file_content(file_path)
|
||||
all_content = project.read_file(file_path)
|
||||
total_lines = len(all_content.split("\n"))
|
||||
|
||||
last_line_with_context_around = language_server.retrieve_content_around_line(file_path, total_lines - 1, 1, 3)
|
||||
last_line_with_context_around = project.retrieve_content_around_line(file_path, total_lines - 1, 1, 3)
|
||||
assert len(last_line_with_context_around.lines) <= 5 # Should have at most 5 lines (last line + 1 above + up to 3 below)
|
||||
assert last_line_with_context_around.lines[-1].line_number >= total_lines - 4 # Last line should be at least total_lines - 4
|
||||
# Check match type for the target line
|
||||
@@ -186,8 +188,6 @@ class TestLanguageServerBasics:
|
||||
else:
|
||||
assert line.match_type == LineType.AFTER_MATCH
|
||||
|
||||
|
||||
class TestProjectBasics:
|
||||
@pytest.mark.parametrize("project", [Language.PYTHON], indirect=True)
|
||||
def test_search_files_for_pattern(self, project: Project) -> None:
|
||||
"""Test search_files_for_pattern with various patterns and glob filters."""
|
||||
|
||||
Reference in New Issue
Block a user