Skip to content

Commit e1dc3b6

Browse files
committed
feat(lsp): add tests for excluding shadowed comprehension variables in references and renaming
1 parent 563d722 commit e1dc3b6

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

tests/lsp/test_lsp_features.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,48 @@ TEST(lsp_references_list_comprehension_loop_var) {
957957
free(response);
958958
}
959959

960+
TEST(lsp_references_exclude_shadowed_comprehension_var_for_outer_symbol) {
961+
const char *code =
962+
"set item to 0\n"
963+
"set values to [item for item in [1, 2, 3]]\n"
964+
"print item\n";
965+
ASSERT_TRUE(lsp_did_open(g_ctx, "file:///test.kr", code));
966+
967+
usleep(100000); // 100ms
968+
char *diag = lsp_read_response(g_ctx, 500);
969+
free(diag);
970+
971+
char *response = lsp_references(g_ctx, 0, 5);
972+
ASSERT_PTR_NOT_NULL(response);
973+
ASSERT_TRUE(lsp_is_valid_json(response));
974+
ASSERT_TRUE(lsp_response_contains(response, "\"line\":0,\"character\":0"));
975+
ASSERT_TRUE(lsp_response_contains(response, "\"line\":2,\"character\":0"));
976+
ASSERT_FALSE(lsp_response_contains(response, "\"line\":1,\"character\":0"));
977+
free(response);
978+
}
979+
980+
TEST(lsp_rename_excludes_shadowed_comprehension_var_for_outer_symbol) {
981+
const char *code =
982+
"set item to 0\n"
983+
"set values to [item for item in [1, 2, 3]]\n"
984+
"print item\n";
985+
ASSERT_TRUE(lsp_did_open(g_ctx, "file:///test.kr", code));
986+
987+
usleep(100000); // 100ms
988+
char *diag = lsp_read_response(g_ctx, 500);
989+
free(diag);
990+
991+
char *response = lsp_rename(g_ctx, 0, 5, "renamed_item");
992+
ASSERT_PTR_NOT_NULL(response);
993+
ASSERT_TRUE(lsp_is_valid_json(response));
994+
ASSERT_TRUE(lsp_response_contains(response, "\"newText\":\"renamed_item\""));
995+
ASSERT_TRUE(lsp_response_contains(response, "\"line\":0,\"character\":4"));
996+
ASSERT_TRUE(lsp_response_contains(response, "\"line\":2,\"character\":6"));
997+
ASSERT_FALSE(lsp_response_contains(response, "\"line\":1,\"character\":15"));
998+
ASSERT_FALSE(lsp_response_contains(response, "\"line\":1,\"character\":24"));
999+
free(response);
1000+
}
1001+
9601002
TEST(lsp_references_include_debug_statement_usage) {
9611003
const char *code =
9621004
"set tracked to 10\n"

0 commit comments

Comments
 (0)