Latest LSP 3.16 protocol

Pulls in https://github.com/gluon-lang/lsp-types/pull/186
This commit is contained in:
kjeremy
2020-11-16 15:10:13 -05:00
parent 0a658c4a97
commit 233fdb12ce
12 changed files with 32 additions and 33 deletions

View File

@@ -62,6 +62,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
prepare_provider: Some(true),
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
})),
on_type_rename_provider: None,
document_link_provider: None,
color_provider: None,
execute_command_provider: None,

View File

@@ -55,8 +55,8 @@ fn location_naive(workspace_root: &Path, span: &DiagnosticSpan) -> lsp_types::Lo
// FIXME: this doesn't handle UTF16 offsets correctly
let range = lsp_types::Range::new(
lsp_types::Position::new(span.line_start as u64 - 1, span.column_start as u64 - 1),
lsp_types::Position::new(span.line_end as u64 - 1, span.column_end as u64 - 1),
lsp_types::Position::new(span.line_start as u32 - 1, span.column_start as u32 - 1),
lsp_types::Position::new(span.line_end as u32 - 1, span.column_end as u32 - 1),
);
lsp_types::Location { uri, range }

View File

@@ -6,11 +6,11 @@
/// client notifications.
#[derive(Debug, Clone)]
pub(crate) struct DocumentData {
pub(crate) version: Option<i64>,
pub(crate) version: i32,
}
impl DocumentData {
pub(crate) fn new(version: i64) -> Self {
DocumentData { version: Some(version) }
pub(crate) fn new(version: i32) -> Self {
DocumentData { version }
}
}

View File

@@ -263,9 +263,9 @@ impl GlobalStateSnapshot {
self.vfs.read().1[&id]
}
pub(crate) fn url_file_version(&self, url: &Url) -> Option<i64> {
pub(crate) fn url_file_version(&self, url: &Url) -> Option<i32> {
let path = from_proto::vfs_path(&url).ok()?;
self.mem_docs.get(&path)?.version
Some(self.mem_docs.get(&path)?.version)
}
pub(crate) fn anchored_path(&self, file_id: FileId, path: &str) -> Url {

View File

@@ -302,7 +302,7 @@ pub enum SnippetDocumentChangeOperation {
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SnippetTextDocumentEdit {
pub text_document: lsp_types::VersionedTextDocumentIdentifier,
pub text_document: lsp_types::OptionalVersionedTextDocumentIdentifier,
pub edits: Vec<SnippetTextEdit>,
}

View File

@@ -51,7 +51,7 @@ impl GlobalState {
}
let percentage = fraction.map(|f| {
assert!(0.0 <= f && f <= 1.0);
f * 100.0
(f * 100.0) as u32
});
let token = lsp_types::ProgressToken::String(format!("rustAnalyzer/{}", title));
let work_done_progress = match state {
@@ -98,11 +98,11 @@ pub(crate) fn apply_document_changes(
// The VFS will normalize the end of lines to `\n`.
enum IndexValid {
All,
UpToLineExclusive(u64),
UpToLineExclusive(u32),
}
impl IndexValid {
fn covers(&self, line: u64) -> bool {
fn covers(&self, line: u32) -> bool {
match *self {
IndexValid::UpToLineExclusive(to) => to > line,
_ => true,

View File

@@ -368,7 +368,7 @@ impl GlobalState {
let url = file_id_to_url(&self.vfs.read().0, file_id);
let diagnostics = self.diagnostics.diagnostics_for(file_id).cloned().collect();
let version = from_proto::vfs_path(&url)
.map(|path| self.mem_docs.get(&path)?.version)
.map(|path| self.mem_docs.get(&path).map(|it| it.version))
.unwrap_or_default();
self.send_notification::<lsp_types::notification::PublishDiagnostics>(
@@ -521,7 +521,7 @@ impl GlobalState {
let mut version = None;
if let Ok(path) = from_proto::vfs_path(&params.text_document.uri) {
match this.mem_docs.remove(&path) {
Some(doc) => version = doc.version,
Some(doc) => version = Some(doc.version),
None => log::error!("orphan DidCloseTextDocument: {}", path),
}

View File

@@ -21,9 +21,7 @@ use crate::{
pub(crate) fn position(line_index: &LineIndex, offset: TextSize) -> lsp_types::Position {
let line_col = line_index.line_col(offset);
let line = u64::from(line_col.line);
let character = u64::from(line_col.col_utf16);
lsp_types::Position::new(line, character)
lsp_types::Position::new(line_col.line, line_col.col_utf16)
}
pub(crate) fn range(line_index: &LineIndex, range: TextRange) -> lsp_types::Range {
@@ -278,9 +276,9 @@ pub(crate) fn signature_help(
label.push_str(", ");
}
first = false;
let start = label.len() as u64;
let start = label.len() as u32;
label.push_str(param);
let end = label.len() as u64;
let end = label.len() as u32;
params.push(lsp_types::ParameterInformation {
label: lsp_types::ParameterLabel::LabelOffsets([start, end]),
documentation: None,
@@ -302,7 +300,7 @@ pub(crate) fn signature_help(
})
};
let active_parameter = call_info.active_parameter.map(|it| it as i64);
let active_parameter = call_info.active_parameter.map(|it| it as u32);
let signature = lsp_types::SignatureInformation {
label,
@@ -518,13 +516,13 @@ pub(crate) fn url_from_abs_path(path: &Path) -> lsp_types::Url {
lsp_types::Url::parse(&url).unwrap()
}
pub(crate) fn versioned_text_document_identifier(
pub(crate) fn optional_versioned_text_document_identifier(
snap: &GlobalStateSnapshot,
file_id: FileId,
) -> lsp_types::VersionedTextDocumentIdentifier {
) -> lsp_types::OptionalVersionedTextDocumentIdentifier {
let url = url(snap, file_id);
let version = snap.url_file_version(&url);
lsp_types::VersionedTextDocumentIdentifier { uri: url, version }
lsp_types::OptionalVersionedTextDocumentIdentifier { uri: url, version }
}
pub(crate) fn location(
@@ -613,7 +611,7 @@ pub(crate) fn snippet_text_document_edit(
is_snippet: bool,
source_file_edit: SourceFileEdit,
) -> Result<lsp_ext::SnippetTextDocumentEdit> {
let text_document = versioned_text_document_identifier(snap, source_file_edit.file_id);
let text_document = optional_versioned_text_document_identifier(snap, source_file_edit.file_id);
let line_index = snap.analysis.file_line_index(source_file_edit.file_id)?;
let line_endings = snap.file_line_endings(source_file_edit.file_id);
let edits = source_file_edit