feat: add asynchronous LSP plugin diagnostics and definitions
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
pub struct DocumentSnapshot {
|
||||
pub id: usize,
|
||||
pub revision: u64,
|
||||
pub path: Option<String>,
|
||||
pub root: String,
|
||||
pub text: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum DocumentEventKind {
|
||||
Open,
|
||||
Change,
|
||||
Save,
|
||||
Close,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize)]
|
||||
pub struct DocumentEvent {
|
||||
pub event: DocumentEventKind,
|
||||
pub document: DocumentSnapshot,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum DiagnosticSeverity {
|
||||
Error,
|
||||
Warning,
|
||||
Information,
|
||||
Hint,
|
||||
}
|
||||
|
||||
/// Zero-based extended-grapheme positions, independent of any server encoding.
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct TextPosition {
|
||||
pub row: usize,
|
||||
pub column: usize,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
|
||||
#[serde(deny_unknown_fields)]
|
||||
pub struct Diagnostic {
|
||||
pub start: TextPosition,
|
||||
pub end: TextPosition,
|
||||
pub severity: DiagnosticSeverity,
|
||||
pub message: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(tag = "type", rename_all = "snake_case", deny_unknown_fields)]
|
||||
pub enum UpdateEffect {
|
||||
Diagnostics {
|
||||
buffer_id: usize,
|
||||
revision: u64,
|
||||
items: Vec<Diagnostic>,
|
||||
},
|
||||
Navigate {
|
||||
buffer_id: usize,
|
||||
revision: u64,
|
||||
path: PathBuf,
|
||||
row: usize,
|
||||
column: usize,
|
||||
},
|
||||
Message {
|
||||
text: String,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PluginUpdate {
|
||||
pub request_id: Option<u64>,
|
||||
pub effects: Vec<UpdateEffect>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum PluginEvent {
|
||||
Response {
|
||||
id: u64,
|
||||
effects: Vec<crate::editor::Effect>,
|
||||
},
|
||||
Update(PluginUpdate),
|
||||
}
|
||||
Reference in New Issue
Block a user