From 04bd9e467c667a516e3e7c8ef03e1a1f577c17ed Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 03 Mar 2024 18:31:42 +0000 Subject: [PATCH] refactor: remove lsp for now It was kept to be a consumer of jrsonnet-parser, but wasn't really working, in future a proper LSP implementation will be developed. --- --- a/Cargo.lock +++ b/Cargo.lock @@ -284,21 +284,6 @@ ] [[package]] -name = "crossbeam-channel" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" - -[[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -390,15 +375,6 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -461,16 +437,6 @@ ] [[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] name = "indexmap" version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -630,19 +596,6 @@ ] [[package]] -name = "jrsonnet-lsp" -version = "0.5.0-pre96" -dependencies = [ - "anyhow", - "jrsonnet-evaluator", - "jrsonnet-rowan-parser", - "lsp-server", - "lsp-types", - "serde", - "serde_json", -] - -[[package]] name = "jrsonnet-macros" version = "0.5.0-pre96" dependencies = [ @@ -762,12 +715,6 @@ "autocfg", "scopeguard", ] - -[[package]] -name = "log" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "logos" @@ -812,31 +759,6 @@ ] [[package]] -name = "lsp-server" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248f65b78f6db5d8e1b1604b4098a28b43d21a8eb1deeca22b1c421b276c7095" -dependencies = [ - "crossbeam-channel", - "log", - "serde", - "serde_json", -] - -[[package]] -name = "lsp-types" -version = "0.95.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158c1911354ef73e8fe42da6b10c0484cb65c7f1007f28022e847706c1ab6984" -dependencies = [ - "bitflags 1.3.2", - "serde", - "serde_json", - "serde_repr", - "url", -] - -[[package]] name = "md5" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1023,12 +945,6 @@ checksum = "36bae92c60fa2398ce4678b98b2c4b5a7c61099961ca1fa305aec04a9ad28922" [[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] name = "ppv-lite86" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1217,17 +1133,6 @@ "itoa", "ryu", "serde", -] - -[[package]] -name = "serde_repr" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.50", ] [[package]] @@ -1436,24 +1341,9 @@ "proc-macro2", "quote", "syn 2.0.50", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", ] [[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1466,12 +1356,6 @@ checksum = "a3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68f" [[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - -[[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1482,33 +1366,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] [[package]] name = "unicode-width" version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" - -[[package]] -name = "url" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] [[package]] name = "utf8parse" --- a/cmds/jrsonnet-lsp/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "jrsonnet-lsp" -version.workspace = true -edition = "2021" - -[dependencies] -anyhow.workspace = true -jrsonnet-evaluator.workspace = true -jrsonnet-rowan-parser.workspace = true -lsp-server.workspace = true -lsp-types.workspace = true -serde.workspace = true -serde_json.workspace = true --- a/cmds/jrsonnet-lsp/src/main.rs +++ /dev/null @@ -1,188 +0,0 @@ -use std::{fs::File, io::Write, path::PathBuf, str::FromStr}; - -use lsp_server::{Connection, ErrorCode, Message, Request, RequestId, Response}; -use lsp_types::{ - notification::{DidChangeTextDocument, DidOpenTextDocument, Notification}, - request::{DocumentLinkRequest, HoverRequest}, - CompletionOptions, DidChangeTextDocumentParams, DidOpenTextDocumentParams, DocumentLink, - DocumentLinkOptions, ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncKind, - TextDocumentSyncOptions, Url, WorkDoneProgressOptions, -}; - -fn main() { - let mut log = File::create("test").unwrap(); - writeln!(log, "start").unwrap(); - let (connection, io_threads) = Connection::stdio(); - let capabilities = serde_json::to_value(ServerCapabilities { - completion_provider: Some(CompletionOptions::default()), - definition_provider: Some(lsp_types::OneOf::Left(true)), - document_link_provider: Some(DocumentLinkOptions { - resolve_provider: Some(false), - work_done_progress_options: WorkDoneProgressOptions::default(), - }), - hover_provider: Some(lsp_types::HoverProviderCapability::Simple(true)), - text_document_sync: Some(TextDocumentSyncCapability::Options( - TextDocumentSyncOptions { - change: Some(TextDocumentSyncKind::FULL), - open_close: Some(true), - ..TextDocumentSyncOptions::default() - }, - )), - ..ServerCapabilities::default() - }) - .expect("failed to convert capabilities to json"); - - connection - .initialize(capabilities) - .expect("failed to initialize connection"); - - writeln!(log, "initialized").unwrap(); - - main_loop(&mut log, &connection).expect("main loop failed"); - - io_threads.join().expect("failed to join io_threads"); -} -fn main_loop(log: &mut File, connection: &Connection) -> anyhow::Result<()> { - // let mut es = EvaluationState::default(); - // es.set_import_resolver(Box::new(FileImportResolver::default())); - - let reply = |response: Response| { - connection - .sender - .send(Message::Response(response)) - .expect("failed to respond"); - }; - - for msg in &connection.receiver { - match msg { - Message::Response(_) => (), - Message::Request(req) => { - if connection.handle_shutdown(&req)? { - return Ok(()); - } - if let Some((id, params)) = cast::(&req) { - reply(Response::new_ok(id, >::new())); - } else if let Some((id, params)) = cast::(&req) { - let pos = params - .text_document_position_params - .text_document - .uri - .path(); - let buf = PathBuf::from_str(pos).unwrap(); - // let pos = es - // .map_from_source_location( - // &buf, - // params.text_document_position_params.position.line as usize + 1, - // params.text_document_position_params.position.character as usize + 1, - // ) - // .unwrap(); - // let el = ExprLocation(buf.clone().into(), pos as usize, pos as usize); - // let es2 = es.clone(); - // reply(Response::new_ok( - // id, - // Some(Hover { - // range: None, - // contents: HoverContents::Markup(MarkupContent { - // kind: MarkupKind::Markdown, - // value: es - // .run_in_state_with_breakpoint(el, move || { - // es2.reset_evaluation_state(&buf); - // es2.import_file(&PathBuf::new(), &buf)? - // .to_string() - // .map(|_| ()) - // }) - // .unwrap() - // .unwrap_or_else(|| Val::Null) - // .value_type() - // .to_string(), - // }), - // }), - // )); - } else { - reply(Response::new_err( - req.id, - ErrorCode::MethodNotFound as i32, - format!("unrecognized request {}", req.method), - )) - } - /* - if let Some((id, params)) = cast::(&req) { - let links = handle_links(&files, params).unwrap_or_default(); - reply(Response::new_ok(id, links)); - } else if let Some((id, params)) = cast::(&req) { - if let Some(loc) = handle_goto(&files, params) { - reply(Response::new_ok(id, loc)) - } else { - reply(Response::new_ok(id, ())) - } - } else if let Some((id, params)) = cast::(&req) { - match handle_hover(&files, params) { - Some((range, markdown)) => { - reply(Response::new_ok( - id, - Hover { - contents: HoverContents::Markup(MarkupContent { - kind: MarkupKind::Markdown, - value: markdown, - }), - range, - }, - )); - } - None => { - reply(Response::new_ok(id, ())); - } - } - } else if let Some((id, params)) = cast::(&req) { - let completions = handle_completion(&files, params.text_document_position) - .unwrap_or_default(); - reply(Response::new_ok(id, completions)); - } else - */ - } - Message::Notification(req) => { - let mut handle = |text: String, uri: Url| { - writeln!(log, "updated file: {:?}", uri).unwrap(); - let path = match PathBuf::from_str(uri.path()) { - Ok(x) => x, - Err(_) => return, - }; - let (ast, errors) = jrsonnet_rowan_parser::parse(&text); - // es.add_parsed_file(path.into(), text.into(), parsed) - // .unwrap(); - writeln!(log, "parsed: {:?}", uri).unwrap(); - }; - - match &*req.method { - DidOpenTextDocument::METHOD => { - let params: DidOpenTextDocumentParams = - match serde_json::from_value(req.params) { - Ok(x) => x, - Err(_) => continue, - }; - handle(params.text_document.text, params.text_document.uri); - } - DidChangeTextDocument::METHOD => { - let params: DidChangeTextDocumentParams = - match serde_json::from_value(req.params) { - Ok(x) => x, - Err(_) => continue, - }; - for change in params.content_changes.into_iter() { - handle(change.text, params.text_document.uri.clone()); - } - } - _ => continue, - } - } - } - } - Ok(()) -} -fn cast(req: &Request) -> Option<(RequestId, R::Params)> -where - R: lsp_types::request::Request, - R::Params: serde::de::DeserializeOwned, -{ - req.clone().extract(R::METHOD).ok() -} -- gitstuff