From 745892fbddea56040139108277e728b53fd8fc11 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 May 2020 03:03:21 +0000 Subject: CTAN sync 202005280303 --- support/texlab/src/completion/latex/tikz_lib.rs | 138 ++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 support/texlab/src/completion/latex/tikz_lib.rs (limited to 'support/texlab/src/completion/latex/tikz_lib.rs') diff --git a/support/texlab/src/completion/latex/tikz_lib.rs b/support/texlab/src/completion/latex/tikz_lib.rs new file mode 100644 index 0000000000..fb51fd7229 --- /dev/null +++ b/support/texlab/src/completion/latex/tikz_lib.rs @@ -0,0 +1,138 @@ +use super::combinators::{self, Parameter}; +use crate::{ + completion::types::{Item, ItemData}, + feature::FeatureRequest, + protocol::CompletionParams, + syntax::LANGUAGE_DATA, +}; +use std::iter; + +pub async fn complete_latex_pgf_libraries<'a>( + req: &'a FeatureRequest, + items: &mut Vec>, +) { + let param = Parameter { + name: "usepgflibrary", + index: 0, + }; + combinators::argument(req, iter::once(param), |ctx| async move { + for name in &LANGUAGE_DATA.pgf_libraries { + let item = Item::new(ctx.range, ItemData::PgfLibrary { name }); + items.push(item); + } + }) + .await; +} + +pub async fn complete_latex_tikz_libraries<'a>( + req: &'a FeatureRequest, + items: &mut Vec>, +) { + let param = Parameter { + name: "usetikzlibrary", + index: 0, + }; + combinators::argument(req, iter::once(param), |ctx| async move { + for name in &LANGUAGE_DATA.tikz_libraries { + let item = Item::new(ctx.range, ItemData::TikzLibrary { name }); + items.push(item); + } + }) + .await; +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::feature::FeatureTester; + + #[tokio::test] + async fn empty_latex_document_pgf() { + let req = FeatureTester::new() + .file("main.tex", "") + .main("main.tex") + .position(0, 0) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_pgf_libraries(&req, &mut actual_items).await; + + assert!(actual_items.is_empty()); + } + + #[tokio::test] + async fn empty_bibtex_document_pgf() { + let req = FeatureTester::new() + .file("main.bib", "") + .main("main.bib") + .position(0, 0) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_pgf_libraries(&req, &mut actual_items).await; + + assert!(actual_items.is_empty()); + } + + #[tokio::test] + async fn empty_latex_document_tikz() { + let req = FeatureTester::new() + .file("main.tex", "") + .main("main.tex") + .position(0, 0) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_tikz_libraries(&req, &mut actual_items).await; + + assert!(actual_items.is_empty()); + } + + #[tokio::test] + async fn empty_bibtex_document_tikz() { + let req = FeatureTester::new() + .file("main.bib", "") + .main("main.bib") + .position(0, 0) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_tikz_libraries(&req, &mut actual_items).await; + + assert!(actual_items.is_empty()); + } + + #[tokio::test] + async fn pgf_library() { + let req = FeatureTester::new() + .file("main.tex", r#"\usepgflibrary{}"#) + .main("main.tex") + .position(0, 15) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_pgf_libraries(&req, &mut actual_items).await; + + assert!(!actual_items.is_empty()); + } + + #[tokio::test] + async fn tikz_library() { + let req = FeatureTester::new() + .file("main.tex", r#"\usetikzlibrary{}"#) + .main("main.tex") + .position(0, 16) + .test_completion_request() + .await; + let mut actual_items = Vec::new(); + + complete_latex_tikz_libraries(&req, &mut actual_items).await; + + assert!(!actual_items.is_empty()); + } +} -- cgit v1.2.3