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

8
Cargo.lock generated
View file

@ -852,9 +852,9 @@ dependencies = [
[[package]] [[package]]
name = "lsp-server" name = "lsp-server"
version = "0.4.1" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c85acaf36c53bf15da2b8b35afeea56747707261f59eb0b77229081dd72b04e" checksum = "69b18dfe0e4a380b872aa79d8e0ee6c3d7a9682466e84b83ad807c88b3545f79"
dependencies = [ dependencies = [
"crossbeam-channel 0.5.0", "crossbeam-channel 0.5.0",
"log", "log",
@ -864,9 +864,9 @@ dependencies = [
[[package]] [[package]]
name = "lsp-types" name = "lsp-types"
version = "0.83.0" version = "0.83.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25e0bd4b95038f2c23bda332ba0ca684e8dda765db1f9bdb63dc4c3e01f3b456" checksum = "c4e79f39834b97271f9f5ecec573e42c7d9c5bdbd2620b30a851054ece6aab6d"
dependencies = [ dependencies = [
"base64", "base64",
"bitflags", "bitflags",

View file

@ -21,7 +21,7 @@ env_logger = { version = "0.8.1", default-features = false }
itertools = "0.9.0" itertools = "0.9.0"
jod-thread = "0.1.0" jod-thread = "0.1.0"
log = "0.4.8" log = "0.4.8"
lsp-types = { version = "0.83.0", features = ["proposed"] } lsp-types = { version = "0.83.1", features = ["proposed"] }
parking_lot = "0.11.0" parking_lot = "0.11.0"
pico-args = "0.3.1" pico-args = "0.3.1"
oorandom = "11.1.2" oorandom = "11.1.2"
@ -31,7 +31,7 @@ serde_json = "1.0.48"
threadpool = "1.7.1" threadpool = "1.7.1"
rayon = "1.5" rayon = "1.5"
mimalloc = { version = "0.1.19", default-features = false, optional = true } mimalloc = { version = "0.1.19", default-features = false, optional = true }
lsp-server = "0.4.0" lsp-server = "0.5.0"
tracing = "0.1" tracing = "0.1"
tracing-subscriber = { version = "0.2", default-features = false, features = ["env-filter", "registry"] } tracing-subscriber = { version = "0.2", default-features = false, features = ["env-filter", "registry"] }
tracing-tree = { version = "0.1.4" } tracing-tree = { version = "0.1.4" }

View file

@ -62,6 +62,7 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
prepare_provider: Some(true), prepare_provider: Some(true),
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None }, work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
})), })),
on_type_rename_provider: None,
document_link_provider: None, document_link_provider: None,
color_provider: None, color_provider: None,
execute_command_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 // FIXME: this doesn't handle UTF16 offsets correctly
let range = lsp_types::Range::new( 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_start as u32 - 1, span.column_start as u32 - 1),
lsp_types::Position::new(span.line_end as u64 - 1, span.column_end as u64 - 1), lsp_types::Position::new(span.line_end as u32 - 1, span.column_end as u32 - 1),
); );
lsp_types::Location { uri, range } lsp_types::Location { uri, range }

View file

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

View file

@ -263,9 +263,9 @@ pub(crate) fn file_line_endings(&self, id: FileId) -> LineEndings {
self.vfs.read().1[&id] 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()?; 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 { 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)] #[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct SnippetTextDocumentEdit { pub struct SnippetTextDocumentEdit {
pub text_document: lsp_types::VersionedTextDocumentIdentifier, pub text_document: lsp_types::OptionalVersionedTextDocumentIdentifier,
pub edits: Vec<SnippetTextEdit>, pub edits: Vec<SnippetTextEdit>,
} }

View file

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

View file

@ -368,7 +368,7 @@ fn handle_event(&mut self, event: Event) -> Result<()> {
let url = file_id_to_url(&self.vfs.read().0, file_id); let url = file_id_to_url(&self.vfs.read().0, file_id);
let diagnostics = self.diagnostics.diagnostics_for(file_id).cloned().collect(); let diagnostics = self.diagnostics.diagnostics_for(file_id).cloned().collect();
let version = from_proto::vfs_path(&url) 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(); .unwrap_or_default();
self.send_notification::<lsp_types::notification::PublishDiagnostics>( self.send_notification::<lsp_types::notification::PublishDiagnostics>(
@ -521,7 +521,7 @@ fn on_notification(&mut self, not: Notification) -> Result<()> {
let mut version = None; let mut version = None;
if let Ok(path) = from_proto::vfs_path(&params.text_document.uri) { if let Ok(path) = from_proto::vfs_path(&params.text_document.uri) {
match this.mem_docs.remove(&path) { match this.mem_docs.remove(&path) {
Some(doc) => version = doc.version, Some(doc) => version = Some(doc.version),
None => log::error!("orphan DidCloseTextDocument: {}", path), None => log::error!("orphan DidCloseTextDocument: {}", path),
} }

View file

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

View file

@ -108,7 +108,7 @@ pub(crate) fn project(fixture: &str) -> Server {
} }
pub(crate) struct Server { pub(crate) struct Server {
req_id: Cell<u64>, req_id: Cell<i32>,
messages: RefCell<Vec<Message>>, messages: RefCell<Vec<Message>>,
_thread: jod_thread::JoinHandle<()>, _thread: jod_thread::JoinHandle<()>,
client: Connection, client: Connection,
@ -165,7 +165,7 @@ pub(crate) fn send_request<R>(&self, params: R::Params) -> Value
R::Params: Serialize, R::Params: Serialize,
{ {
let id = self.req_id.get(); let id = self.req_id.get();
self.req_id.set(id + 1); self.req_id.set(id.wrapping_add(1));
let r = Request::new(id.into(), R::METHOD.to_string(), params); let r = Request::new(id.into(), R::METHOD.to_string(), params);
self.send_request_(r) self.send_request_(r)

View file

@ -1,5 +1,5 @@
<!--- <!---
lsp_ext.rs hash: 9d5daed5b25dc4f6 lsp_ext.rs hash: 203fdf79b21b5987
If you need to change the above hash to make the test pass, please check if you If you need to change the above hash to make the test pass, please check if you
need to adjust this doc as well and ping this issue: need to adjust this doc as well and ping this issue:
@ -45,7 +45,7 @@ interface SnippetTextEdit extends TextEdit {
```typescript ```typescript
export interface TextDocumentEdit { export interface TextDocumentEdit {
textDocument: VersionedTextDocumentIdentifier; textDocument: OptionalVersionedTextDocumentIdentifier;
edits: (TextEdit | SnippetTextEdit)[]; edits: (TextEdit | SnippetTextEdit)[];
} }
``` ```