Skip to content

Commit 4b1e9b3

Browse files
committed
Address code review
1 parent f30a8f3 commit 4b1e9b3

4 files changed

Lines changed: 45 additions & 35 deletions

File tree

crates/ark/src/lsp/ark_file.rs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,15 @@ impl ArkFile {
9090
db: &dyn ArkDb,
9191
point: tree_sitter::Point,
9292
) -> anyhow::Result<lsp_types::Position> {
93-
let line_col = biome_line_index::LineCol {
94-
line: point.row as u32,
95-
col: point.column as u32,
96-
};
97-
to_proto::position_from_line_col(line_col, self.line_index(db), self.encoding)
93+
lsp_position_from_tree_sitter_point(point, self.line_index(db), self.encoding)
9894
}
9995

10096
pub(crate) fn lsp_range_from_tree_sitter_range(
10197
&self,
10298
db: &dyn ArkDb,
10399
range: tree_sitter::Range,
104100
) -> anyhow::Result<lsp_types::Range> {
105-
let start = self.lsp_position_from_tree_sitter_point(db, range.start_point)?;
106-
let end = self.lsp_position_from_tree_sitter_point(db, range.end_point)?;
107-
Ok(lsp_types::Range::new(start, end))
101+
lsp_range_from_tree_sitter_range(range, self.line_index(db), self.encoding)
108102
}
109103

110104
pub(crate) fn tree_sitter_range_from_lsp_range(
@@ -126,6 +120,31 @@ impl ArkFile {
126120
}
127121
}
128122

123+
/// Free functions over `LineIndex` + `PositionEncoding`, so anything holding
124+
/// those two (an `ArkFile` plus its `db`, or a `DocumentContext`) can convert
125+
/// without each carrying its own copy of the logic.
126+
pub(crate) fn lsp_position_from_tree_sitter_point(
127+
point: tree_sitter::Point,
128+
line_index: &biome_line_index::LineIndex,
129+
encoding: PositionEncoding,
130+
) -> anyhow::Result<lsp_types::Position> {
131+
let line_col = biome_line_index::LineCol {
132+
line: point.row as u32,
133+
col: point.column as u32,
134+
};
135+
to_proto::position_from_line_col(line_col, line_index, encoding)
136+
}
137+
138+
pub(crate) fn lsp_range_from_tree_sitter_range(
139+
range: tree_sitter::Range,
140+
line_index: &biome_line_index::LineIndex,
141+
encoding: PositionEncoding,
142+
) -> anyhow::Result<lsp_types::Range> {
143+
let start = lsp_position_from_tree_sitter_point(range.start_point, line_index, encoding)?;
144+
let end = lsp_position_from_tree_sitter_point(range.end_point, line_index, encoding)?;
145+
Ok(lsp_types::Range::new(start, end))
146+
}
147+
129148
#[cfg(test)]
130149
pub(crate) fn test_ark_file(code: &str) -> (oak_db::OakDatabase, ArkFile) {
131150
use aether_path::FilePath;

crates/ark/src/lsp/completions/completion_item.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use tower_lsp::lsp_types::Range;
3636
use tower_lsp::lsp_types::TextEdit;
3737
use tree_sitter::Node;
3838

39+
use crate::lsp::ark_file::lsp_position_from_tree_sitter_point;
3940
use crate::lsp::completions::function_context::ArgumentsStatus;
4041
use crate::lsp::completions::function_context::FunctionContext;
4142
use crate::lsp::completions::function_context::FunctionRefUsage;
@@ -644,7 +645,8 @@ fn completion_item_from_dot_dot_dot(
644645

645646
item.kind = Some(CompletionItemKind::FIELD);
646647

647-
let position = context.lsp_position_from_tree_sitter_point(context.point)?;
648+
let position =
649+
lsp_position_from_tree_sitter_point(context.point, context.line_index, context.encoding)?;
648650

649651
let range = Range {
650652
start: position,

crates/ark/src/lsp/completions/function_context.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ use tower_lsp::lsp_types;
1010
use tower_lsp::lsp_types::Range;
1111
use tree_sitter::Node;
1212

13+
use crate::lsp::ark_file::lsp_position_from_tree_sitter_point;
14+
use crate::lsp::ark_file::lsp_range_from_tree_sitter_range;
1315
use crate::lsp::document_context::DocumentContext;
1416
use crate::lsp::traits::node::NodeExt;
1517
use crate::treesitter::node_find_parent_call;
@@ -61,8 +63,11 @@ impl FunctionContext {
6163
// We shouldn't ever attempt to instantiate a FunctionContext or
6264
// function-flavored CompletionItem in this degenerate case, but we
6365
// return a dummy FunctionContext just to be safe.
64-
let node_end = document_context
65-
.lsp_position_from_tree_sitter_point(completion_node.range().end_point)?;
66+
let node_end = lsp_position_from_tree_sitter_point(
67+
completion_node.range().end_point,
68+
document_context.line_index,
69+
document_context.encoding,
70+
)?;
6671

6772
return Ok(Self {
6873
name: String::new(),
@@ -107,11 +112,17 @@ impl FunctionContext {
107112
Ok(Self {
108113
name,
109114
range: match function_name_node {
110-
Some(node) => document_context.lsp_range_from_tree_sitter_range(node.range())?,
115+
Some(node) => lsp_range_from_tree_sitter_range(
116+
node.range(),
117+
document_context.line_index,
118+
document_context.encoding,
119+
)?,
111120
None => {
112121
// Create a zero-width range at the end of the effective_function_node
113-
let node_end = document_context.lsp_position_from_tree_sitter_point(
122+
let node_end = lsp_position_from_tree_sitter_point(
114123
effective_function_node.range().end_point,
124+
document_context.line_index,
125+
document_context.encoding,
115126
)?;
116127
lsp_types::Range::new(node_end, node_end)
117128
},

crates/ark/src/lsp/document_context.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
//
66
//
77

8-
use aether_lsp_utils::proto::to_proto;
98
use aether_lsp_utils::proto::PositionEncoding;
10-
use tower_lsp::lsp_types;
119
use tree_sitter::Node;
1210
use tree_sitter::Point;
1311

@@ -108,26 +106,6 @@ impl<'a> DocumentContext<'a> {
108106
trigger,
109107
}
110108
}
111-
112-
pub fn lsp_position_from_tree_sitter_point(
113-
&self,
114-
point: tree_sitter::Point,
115-
) -> anyhow::Result<lsp_types::Position> {
116-
let line_col = biome_line_index::LineCol {
117-
line: point.row as u32,
118-
col: point.column as u32,
119-
};
120-
to_proto::position_from_line_col(line_col, self.line_index, self.encoding)
121-
}
122-
123-
pub fn lsp_range_from_tree_sitter_range(
124-
&self,
125-
range: tree_sitter::Range,
126-
) -> anyhow::Result<lsp_types::Range> {
127-
let start = self.lsp_position_from_tree_sitter_point(range.start_point)?;
128-
let end = self.lsp_position_from_tree_sitter_point(range.end_point)?;
129-
Ok(lsp_types::Range::new(start, end))
130-
}
131109
}
132110

133111
/// Owns a `db` + `ArkFile` so unit tests can build a `DocumentContext` the same

0 commit comments

Comments
 (0)