Skip to content

Commit 68b4424

Browse files
refactor: move get_cursor_position to adapters (#278)
1 parent 506c826 commit 68b4424

File tree

5 files changed

+30
-43
lines changed

5 files changed

+30
-43
lines changed

crates/pgt_lsp/src/adapters/mod.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
//! The crate contains a set of converters to translate between `lsp-types` and `text_size` (and vice versa) types.
22
33
use pgt_text_size::TextSize;
4-
use tower_lsp::lsp_types::{ClientCapabilities, PositionEncodingKind};
4+
use tower_lsp::lsp_types::{ClientCapabilities, Position, PositionEncodingKind, Url};
5+
6+
use crate::session::Session;
57

68
pub mod from_lsp;
79
pub mod line_index;
@@ -25,6 +27,29 @@ pub fn negotiated_encoding(capabilities: &ClientCapabilities) -> PositionEncodin
2527
PositionEncoding::Wide(WideEncoding::Utf16)
2628
}
2729

30+
pub fn get_cursor_position(
31+
session: &Session,
32+
url: &Url,
33+
position: Position,
34+
) -> anyhow::Result<TextSize> {
35+
let client_capabilities = session
36+
.client_capabilities()
37+
.expect("Client capabilities not established for current session.");
38+
39+
let line_index = session
40+
.document(url)
41+
.map(|doc| doc.line_index)
42+
.map_err(|_| anyhow::anyhow!("Document not found."))?;
43+
44+
let cursor_pos = from_lsp::offset(
45+
&line_index,
46+
position,
47+
negotiated_encoding(client_capabilities),
48+
)?;
49+
50+
Ok(cursor_pos)
51+
}
52+
2853
#[derive(Clone, Copy, Debug)]
2954
pub enum PositionEncoding {
3055
Utf8,

crates/pgt_lsp/src/handlers.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
pub(crate) mod code_actions;
22
pub(crate) mod completions;
3-
mod helper;
43
pub(crate) mod text_document;

crates/pgt_lsp/src/handlers/code_actions.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::session::Session;
1+
use crate::{adapters::get_cursor_position, session::Session};
22
use anyhow::{Result, anyhow};
33
use tower_lsp::lsp_types::{
44
self, CodeAction, CodeActionDisabled, CodeActionOrCommand, Command, ExecuteCommandParams,
@@ -9,16 +9,14 @@ use pgt_workspace::features::code_actions::{
99
CodeActionKind, CodeActionsParams, CommandActionCategory, ExecuteStatementParams,
1010
};
1111

12-
use super::helper;
13-
1412
pub fn get_actions(
1513
session: &Session,
1614
params: lsp_types::CodeActionParams,
1715
) -> Result<lsp_types::CodeActionResponse> {
1816
let url = params.text_document.uri;
1917
let path = session.file_path(&url)?;
2018

21-
let cursor_position = helper::get_cursor_position(session, &url, params.range.start)?;
19+
let cursor_position = get_cursor_position(session, &url, params.range.start)?;
2220

2321
let workspace_actions = session.workspace.pull_code_actions(CodeActionsParams {
2422
path,

crates/pgt_lsp/src/handlers/completions.rs

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
use crate::session::Session;
1+
use crate::{adapters::get_cursor_position, session::Session};
22
use anyhow::Result;
33
use pgt_workspace::{WorkspaceError, features::completions::GetCompletionsParams};
44
use tower_lsp::lsp_types::{self, CompletionItem, CompletionItemLabelDetails};
55

6-
use super::helper;
7-
86
#[tracing::instrument(level = "trace", skip_all)]
97
pub fn get_completions(
108
session: &Session,
@@ -15,11 +13,7 @@ pub fn get_completions(
1513

1614
let completion_result = match session.workspace.get_completions(GetCompletionsParams {
1715
path,
18-
position: helper::get_cursor_position(
19-
session,
20-
&url,
21-
params.text_document_position.position,
22-
)?,
16+
position: get_cursor_position(session, &url, params.text_document_position.position)?,
2317
}) {
2418
Ok(result) => result,
2519
Err(e) => match e {

crates/pgt_lsp/src/handlers/helper.rs

-29
This file was deleted.

0 commit comments

Comments
 (0)