Skip to content

Commit bc5d699

Browse files
committed
Add TestDocument helper
1 parent fad5048 commit bc5d699

17 files changed

Lines changed: 213 additions & 273 deletions

File tree

crates/ark/src/fixtures/utils.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,6 @@ pub fn r_test_init() {
2929
Console::test_init();
3030
}
3131

32-
pub const TEST_ENCODING: aether_lsp_utils::proto::PositionEncoding =
33-
aether_lsp_utils::proto::PositionEncoding::Wide(biome_line_index::WideEncoding::Utf16);
34-
35-
pub fn tree_sitter_parse(code: &str) -> tree_sitter::Tree {
36-
let mut parser = tree_sitter::Parser::new();
37-
parser
38-
.set_language(&tree_sitter_r::LANGUAGE.into())
39-
.unwrap();
40-
parser.parse(code, None).unwrap()
41-
}
42-
4332
pub fn point_from_cursor(x: &str) -> (String, Point) {
4433
// i.e. looking for `@` in something like `fn(x = @1, y = 2)`, and it treats the
4534
// `@` as the cursor position

crates/ark/src/lsp/completions/sources/composite.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ mod tests {
220220
use crate::lsp::completions::completion_context::CompletionContext;
221221
use crate::lsp::completions::sources::composite::get_completions;
222222
use crate::lsp::completions::sources::composite::is_identifier_like;
223-
use crate::lsp::document_context::DocumentContext;
223+
use crate::lsp::document_context::TestDocument;
224224
use crate::lsp::state::WorldState;
225225
use crate::r_task;
226226
use crate::treesitter::NodeType;
@@ -234,9 +234,8 @@ mod tests {
234234
// identifiers that we provide completions for
235235
for keyword in ["if", "for", "while"] {
236236
let (text, point) = point_from_cursor(&format!("{keyword}@"));
237-
let tree = crate::fixtures::tree_sitter_parse(&text);
238-
let context =
239-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
237+
let doc = TestDocument::new(&text);
238+
let context = doc.context(point);
240239

241240
assert!(is_identifier_like(context.node));
242241
assert_eq!(
@@ -251,9 +250,8 @@ mod tests {
251250
fn test_get_completions_on_empty_document() {
252251
r_task(|| {
253252
let (text, point) = point_from_cursor("@");
254-
let tree = crate::fixtures::tree_sitter_parse(&text);
255-
let document_context =
256-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
253+
let doc = TestDocument::new(&text);
254+
let document_context = doc.context(point);
257255
let state = WorldState::default();
258256
let context = CompletionContext::new(&document_context, &state);
259257

@@ -270,9 +268,8 @@ mod tests {
270268
r_task(|| {
271269
let code = "x <- 1:3\n@\nrnorm(3)";
272270
let (text, point) = point_from_cursor(code);
273-
let tree = crate::fixtures::tree_sitter_parse(&text);
274-
let document_context =
275-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
271+
let doc = TestDocument::new(&text);
272+
let document_context = doc.context(point);
276273
let state = WorldState::default();
277274
let context = CompletionContext::new(&document_context, &state);
278275

crates/ark/src/lsp/completions/sources/composite/call.rs

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ mod tests {
280280
use crate::fixtures::point_from_cursor;
281281
use crate::lsp::completions::completion_context::CompletionContext;
282282
use crate::lsp::completions::sources::composite::call::completions_from_call;
283-
use crate::lsp::document_context::DocumentContext;
283+
use crate::lsp::document_context::TestDocument;
284284
use crate::lsp::state::WorldState;
285285
use crate::r_task;
286286

@@ -289,9 +289,8 @@ mod tests {
289289
r_task(|| {
290290
// Right after `tab`
291291
let (text, point) = point_from_cursor("match(tab@)");
292-
let tree = crate::fixtures::tree_sitter_parse(&text);
293-
let document_context =
294-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
292+
let doc = TestDocument::new(&text);
293+
let document_context = doc.context(point);
295294
let state = WorldState::default();
296295
let context = CompletionContext::new(&document_context, &state);
297296
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -303,9 +302,8 @@ mod tests {
303302

304303
// Right after `tab`
305304
let (text, point) = point_from_cursor("match(1, tab@)");
306-
let tree = crate::fixtures::tree_sitter_parse(&text);
307-
let document_context =
308-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
305+
let doc = TestDocument::new(&text);
306+
let document_context = doc.context(point);
309307
let state = WorldState::default();
310308
let context = CompletionContext::new(&document_context, &state);
311309
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -324,9 +322,8 @@ mod tests {
324322
r_task(|| {
325323
// Place cursor between `()`
326324
let (text, point) = point_from_cursor("not_a_known_function(@)");
327-
let tree = crate::fixtures::tree_sitter_parse(&text);
328-
let document_context =
329-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
325+
let doc = TestDocument::new(&text);
326+
let document_context = doc.context(point);
330327
let state = WorldState::default();
331328
let context = CompletionContext::new(&document_context, &state);
332329
let completions = completions_from_call(&context).unwrap();
@@ -345,9 +342,8 @@ mod tests {
345342

346343
// Place cursor between `()`
347344
let (text, point) = point_from_cursor("my_fun(@)");
348-
let tree = crate::fixtures::tree_sitter_parse(&text);
349-
let document_context =
350-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
345+
let doc = TestDocument::new(&text);
346+
let document_context = doc.context(point);
351347
let state = WorldState::default();
352348
let context = CompletionContext::new(&document_context, &state);
353349
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -363,19 +359,17 @@ mod tests {
363359

364360
// Place just before the `()`
365361
let (text, point) = point_from_cursor("my_fun@()");
366-
let tree = crate::fixtures::tree_sitter_parse(&text);
367-
let document_context =
368-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
362+
let doc = TestDocument::new(&text);
363+
let document_context = doc.context(point);
369364
let state = WorldState::default();
370365
let context = CompletionContext::new(&document_context, &state);
371366
let completions = completions_from_call(&context).unwrap();
372367
assert!(completions.is_none());
373368

374369
// Place just after the `()`
375370
let (text, point) = point_from_cursor("my_fun()@");
376-
let tree = crate::fixtures::tree_sitter_parse(&text);
377-
let document_context =
378-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
371+
let doc = TestDocument::new(&text);
372+
let document_context = doc.context(point);
379373
let state = WorldState::default();
380374
let context = CompletionContext::new(&document_context, &state);
381375
let completions = completions_from_call(&context).unwrap();
@@ -397,9 +391,8 @@ mod tests {
397391

398392
// Place cursor between `()`
399393
let (text, point) = point_from_cursor("my_fun(@)");
400-
let tree = crate::fixtures::tree_sitter_parse(&text);
401-
let document_context =
402-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
394+
let doc = TestDocument::new(&text);
395+
let document_context = doc.context(point);
403396
let state = WorldState::default();
404397
let context = CompletionContext::new(&document_context, &state);
405398
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -415,9 +408,8 @@ mod tests {
415408
r_task(|| {
416409
// No arguments typed yet
417410
let (text, point) = point_from_cursor("match(\n @\n)");
418-
let tree = crate::fixtures::tree_sitter_parse(&text);
419-
let document_context =
420-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
411+
let doc = TestDocument::new(&text);
412+
let document_context = doc.context(point);
421413
let state = WorldState::default();
422414
let context = CompletionContext::new(&document_context, &state);
423415
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -428,9 +420,8 @@ mod tests {
428420

429421
// Partially typed argument
430422
let (text, point) = point_from_cursor("match(\n tab@\n)");
431-
let tree = crate::fixtures::tree_sitter_parse(&text);
432-
let document_context =
433-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
423+
let doc = TestDocument::new(&text);
424+
let document_context = doc.context(point);
434425
let state = WorldState::default();
435426
let context = CompletionContext::new(&document_context, &state);
436427
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -441,9 +432,8 @@ mod tests {
441432

442433
// Partially typed second argument
443434
let (text, point) = point_from_cursor("match(\n 1,\n tab@\n)");
444-
let tree = crate::fixtures::tree_sitter_parse(&text);
445-
let document_context =
446-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
435+
let doc = TestDocument::new(&text);
436+
let document_context = doc.context(point);
447437
let state = WorldState::default();
448438
let context = CompletionContext::new(&document_context, &state);
449439
let completions = completions_from_call(&context).unwrap().unwrap();
@@ -459,9 +449,8 @@ mod tests {
459449
r_task(|| {
460450
fn assert_no_call_completions(code_with_cursor: &str) {
461451
let (text, point) = point_from_cursor(code_with_cursor);
462-
let tree = crate::fixtures::tree_sitter_parse(&text);
463-
let document_context =
464-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
452+
let doc = TestDocument::new(&text);
453+
let document_context = doc.context(point);
465454
let state = WorldState::default();
466455
let context = CompletionContext::new(&document_context, &state);
467456
let completions = completions_from_call(&context).unwrap();

crates/ark/src/lsp/completions/sources/composite/pipe.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ mod tests {
167167

168168
use crate::fixtures::point_from_cursor;
169169
use crate::lsp::completions::sources::composite::pipe::find_pipe_root;
170-
use crate::lsp::document_context::DocumentContext;
170+
use crate::lsp::document_context::TestDocument;
171171
use crate::r_task;
172172
use crate::treesitter::node_find_containing_call;
173173

@@ -176,9 +176,8 @@ mod tests {
176176
r_task(|| {
177177
// Place cursor between `()` of `bar()`
178178
let (text, point) = point_from_cursor("x |> foo() %>% bar(@)");
179-
let tree = crate::fixtures::tree_sitter_parse(&text);
180-
let context =
181-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
179+
let doc = TestDocument::new(&text);
180+
let context = doc.context(point);
182181
let call_node = node_find_containing_call(context.node);
183182

184183
let root = find_pipe_root(&context, call_node).unwrap().unwrap();
@@ -190,9 +189,8 @@ mod tests {
190189
// `%||%` is not a pipe!
191190
// Place cursor between `()` of `bar()`
192191
let (text, point) = point_from_cursor("x |> foo() %||% bar(@)");
193-
let tree = crate::fixtures::tree_sitter_parse(&text);
194-
let context =
195-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
192+
let doc = TestDocument::new(&text);
193+
let context = doc.context(point);
196194
let call_node = node_find_containing_call(context.node);
197195

198196
let root = find_pipe_root(&context, call_node).unwrap();
@@ -210,9 +208,8 @@ mod tests {
210208

211209
// Place cursor between `()`
212210
let (text, point) = point_from_cursor("x %>% foo(@)");
213-
let tree = crate::fixtures::tree_sitter_parse(&text);
214-
let context =
215-
DocumentContext::new(&tree, &text, crate::fixtures::TEST_ENCODING, point, None);
211+
let doc = TestDocument::new(&text);
212+
let context = doc.context(point);
216213
let call_node = node_find_containing_call(context.node);
217214

218215
let root = find_pipe_root(&context, call_node).unwrap().unwrap();

crates/ark/src/lsp/completions/sources/composite/subset.rs

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ mod tests {
9292

9393
use crate::fixtures::package_is_installed;
9494
use crate::lsp::completions::sources::composite::subset::completions_from_subset;
95-
use crate::lsp::document_context::DocumentContext;
95+
use crate::lsp::document_context::TestDocument;
9696
use crate::r_task;
9797

9898
#[test]
@@ -108,9 +108,8 @@ mod tests {
108108

109109
// Right after the `[`
110110
let point = Point { row: 0, column: 4 };
111-
let tree = crate::fixtures::tree_sitter_parse("foo[]");
112-
let context =
113-
DocumentContext::new(&tree, "foo[]", crate::fixtures::TEST_ENCODING, point, None);
111+
let doc = TestDocument::new("foo[]");
112+
let context = doc.context(point);
114113

115114
let completions = completions_from_subset(&context).unwrap().unwrap();
116115
assert_eq!(completions.len(), 2);
@@ -125,17 +124,15 @@ mod tests {
125124

126125
// Right before the `[`
127126
let point = Point { row: 0, column: 3 };
128-
let tree = crate::fixtures::tree_sitter_parse("foo[]");
129-
let context =
130-
DocumentContext::new(&tree, "foo[]", crate::fixtures::TEST_ENCODING, point, None);
127+
let doc = TestDocument::new("foo[]");
128+
let context = doc.context(point);
131129
let completions = completions_from_subset(&context).unwrap();
132130
assert!(completions.is_none());
133131

134132
// Right after the `]`
135133
let point = Point { row: 0, column: 5 };
136-
let tree = crate::fixtures::tree_sitter_parse("foo[]");
137-
let context =
138-
DocumentContext::new(&tree, "foo[]", crate::fixtures::TEST_ENCODING, point, None);
134+
let doc = TestDocument::new("foo[]");
135+
let context = doc.context(point);
139136
let completions = completions_from_subset(&context).unwrap();
140137
assert!(completions.is_none());
141138

@@ -155,9 +152,8 @@ mod tests {
155152

156153
// Works for single comlumn name completion
157154
let point = Point { row: 0, column: 2 };
158-
let tree = crate::fixtures::tree_sitter_parse("x[]");
159-
let context =
160-
DocumentContext::new(&tree, "x[]", crate::fixtures::TEST_ENCODING, point, None);
155+
let doc = TestDocument::new("x[]");
156+
let context = doc.context(point);
161157

162158
let completions = completions_from_subset(&context).unwrap().unwrap();
163159
assert_eq!(completions.len(), 11);
@@ -168,14 +164,8 @@ mod tests {
168164

169165
// Works when completing inside a `c` call
170166
let point = Point { row: 0, column: 6 };
171-
let tree = crate::fixtures::tree_sitter_parse("x[, c()]");
172-
let context = DocumentContext::new(
173-
&tree,
174-
"x[, c()]",
175-
crate::fixtures::TEST_ENCODING,
176-
point,
177-
None,
178-
);
167+
let doc = TestDocument::new("x[, c()]");
168+
let context = doc.context(point);
179169

180170
let completions = completions_from_subset(&context).unwrap().unwrap();
181171
assert_eq!(completions.len(), 11);
@@ -186,14 +176,8 @@ mod tests {
186176

187177
// Works when completing inside a `c` call with a collumn already selected
188178
let point = Point { row: 0, column: 10 };
189-
let tree = crate::fixtures::tree_sitter_parse("x[, c(mpg,)]");
190-
let context = DocumentContext::new(
191-
&tree,
192-
"x[, c(mpg,)]",
193-
crate::fixtures::TEST_ENCODING,
194-
point,
195-
None,
196-
);
179+
let doc = TestDocument::new("x[, c(mpg,)]");
180+
let context = doc.context(point);
197181

198182
let completions = completions_from_subset(&context).unwrap().unwrap();
199183
assert_eq!(completions.len(), 11);
@@ -205,9 +189,8 @@ mod tests {
205189

206190
// Works completing subset2
207191
let point = Point { row: 0, column: 3 };
208-
let tree = crate::fixtures::tree_sitter_parse("x[[]]");
209-
let context =
210-
DocumentContext::new(&tree, "x[[]]", crate::fixtures::TEST_ENCODING, point, None);
192+
let doc = TestDocument::new("x[[]]");
193+
let context = doc.context(point);
211194

212195
let completions = completions_from_subset(&context).unwrap().unwrap();
213196
assert_eq!(completions.len(), 11);

crates/ark/src/lsp/completions/sources/unique/comment.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ use crate::lsp::completions::completion_item::completion_item;
2222
use crate::lsp::completions::sources::CompletionSource;
2323
use crate::lsp::completions::types::CompletionData;
2424
use crate::lsp::document_context::DocumentContext;
25+
#[cfg(test)]
26+
use crate::lsp::document_context::TestDocument;
2527
use crate::lsp::traits::node::NodeExt;
2628
use crate::treesitter::NodeTypeExt;
2729

@@ -147,17 +149,15 @@ fn test_comment() {
147149
r_task(|| {
148150
// If not in a comment, return `None`
149151
let point = Point { row: 0, column: 1 };
150-
let tree = crate::fixtures::tree_sitter_parse("mean()");
151-
let context =
152-
DocumentContext::new(&tree, "mean()", crate::fixtures::TEST_ENCODING, point, None);
152+
let doc = TestDocument::new("mean()");
153+
let context = doc.context(point);
153154
let completions = completions_from_comment(&context).unwrap();
154155
assert!(completions.is_none());
155156

156157
// If in a comment, return empty vector
157158
let point = Point { row: 0, column: 1 };
158-
let tree = crate::fixtures::tree_sitter_parse("# mean");
159-
let context =
160-
DocumentContext::new(&tree, "# mean", crate::fixtures::TEST_ENCODING, point, None);
159+
let doc = TestDocument::new("# mean");
160+
let context = doc.context(point);
161161
let completions = completions_from_comment(&context).unwrap().unwrap();
162162
assert!(completions.is_empty());
163163
});
@@ -183,9 +183,8 @@ fn test_roxygen_comment() {
183183
}
184184

185185
let point = Point { row: 0, column: 4 };
186-
let tree = crate::fixtures::tree_sitter_parse("#' @");
187-
let context =
188-
DocumentContext::new(&tree, "#' @", crate::fixtures::TEST_ENCODING, point, None);
186+
let doc = TestDocument::new("#' @");
187+
let context = doc.context(point);
189188
let completions = completions_from_comment(&context).unwrap().unwrap();
190189

191190
// Make sure we find it

0 commit comments

Comments
 (0)