diff options
author | Norbert Preining <norbert@preining.info> | 2020-05-28 03:03:21 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-05-28 03:03:21 +0000 |
commit | 745892fbddea56040139108277e728b53fd8fc11 (patch) | |
tree | 15e55e299b38fccdabce8364f1fbf4f02ef37994 /support/texlab/src/completion/latex/tikz_lib.rs | |
parent | 195ca7e0c377d83455867bdd8e409d4e1cf024ea (diff) |
CTAN sync 202005280303
Diffstat (limited to 'support/texlab/src/completion/latex/tikz_lib.rs')
-rw-r--r-- | support/texlab/src/completion/latex/tikz_lib.rs | 138 |
1 files changed, 138 insertions, 0 deletions
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<CompletionParams>, + items: &mut Vec<Item<'a>>, +) { + 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<CompletionParams>, + items: &mut Vec<Item<'a>>, +) { + 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()); + } +} |