Skip to content

Commit 474e026

Browse files
author
Zhe Yu
committed
fix(lsp): Validate include parameters in query command
1 parent cac822f commit 474e026

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/vectorcode/lsp_main.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
_prepare_formatted_result,
5353
get_reranked_results,
5454
preprocess_query_keywords,
55+
verify_include,
5556
)
5657

5758
DEFAULT_PROJECT_ROOT: str | None = None
@@ -144,6 +145,14 @@ async def execute_command(ls: LanguageServer, args: list[str]):
144145
message=f"Querying {cleanup_path(str(final_configs.project_root))}",
145146
),
146147
)
148+
if not verify_include(final_configs):
149+
log_msg = "Invalid `--include` parameters!"
150+
logger.error(log_msg)
151+
ls.progress.end(
152+
progress_token,
153+
types.WorkDoneProgressEnd(message=log_msg),
154+
)
155+
return []
147156
final_results = []
148157
try:
149158
preprocess_query_keywords(final_configs)

tests/test_lsp.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,42 @@ async def test_execute_command_query(mock_language_server, mock_config):
8585
mock_language_server.progress.end.assert_called()
8686

8787

88+
@pytest.mark.asyncio
89+
async def test_execute_command_query_invalid_include(mock_language_server, mock_config):
90+
with (
91+
patch(
92+
"vectorcode.lsp_main.parse_cli_args", new_callable=AsyncMock
93+
) as mock_parse_cli_args,
94+
patch("vectorcode.lsp_main.get_database_connector"),
95+
patch(
96+
"vectorcode.lsp_main.get_reranked_results", new_callable=AsyncMock
97+
) as mock_get_reranked_results,
98+
patch("os.path.isfile", return_value=True),
99+
patch("builtins.open", MagicMock()) as mock_open,
100+
):
101+
mock_parse_cli_args.return_value = mock_config
102+
mock_get_reranked_results.return_value = []
103+
104+
# Configure the MagicMock object to return a string when read() is called
105+
mock_file = MagicMock()
106+
mock_file.__enter__.return_value.read.return_value = "{}" # Return valid JSON
107+
mock_open.return_value = mock_file
108+
109+
# Ensure parsed_args.project_root is not None
110+
mock_config.project_root = "/test/project"
111+
mock_config.query = ["test"]
112+
mock_config.include = [QueryInclude.chunk, QueryInclude.document]
113+
114+
# Mock the merge_from method
115+
mock_config.merge_from = AsyncMock(return_value=mock_config)
116+
117+
result = await execute_command(mock_language_server, ["query", "test"])
118+
119+
assert result == []
120+
mock_language_server.progress.begin.assert_called()
121+
mock_language_server.progress.end.assert_called()
122+
123+
88124
@pytest.mark.asyncio
89125
async def test_execute_command_query_default_proj_root(
90126
mock_language_server, mock_config

0 commit comments

Comments
 (0)