diff --git a/crates/ra_ide/src/completion.rs b/crates/ra_ide/src/completion.rs index 7b96902fbb8..a537b68b1f1 100644 --- a/crates/ra_ide/src/completion.rs +++ b/crates/ra_ide/src/completion.rs @@ -21,12 +21,13 @@ mod complete_trait_impl; mod unstable_feature_descriptor; use ra_ide_db::RootDatabase; +#[rustfmt::skip] use crate::{ completion::{ completion_context::CompletionContext, completion_item::{CompletionKind, Completions}, - //TODO: rework + //TODO: cyclic imports caused by xtask generation, this should be better unstable_feature_descriptor::UNSTABLE_FEATURE_DESCRIPTOR, complete_attribute::LintCompletion, }, diff --git a/crates/ra_ide/src/completion/complete_attribute.rs b/crates/ra_ide/src/completion/complete_attribute.rs index 50b0b3ff68e..2161cdfd211 100644 --- a/crates/ra_ide/src/completion/complete_attribute.rs +++ b/crates/ra_ide/src/completion/complete_attribute.rs @@ -19,9 +19,7 @@ pub(super) fn complete_attribute(acc: &mut Completions, ctx: &CompletionContext) (Some(path), Some(token_tree)) if path.to_string() == "derive" => { complete_derive(acc, ctx, token_tree) } - (Some(path), Some(token_tree)) - if path.to_string() == "feature" => - { + (Some(path), Some(token_tree)) if path.to_string() == "feature" => { complete_lint(acc, ctx, token_tree, UNSTABLE_FEATURE_DESCRIPTOR); } (Some(path), Some(token_tree)) @@ -169,7 +167,12 @@ fn complete_derive(acc: &mut Completions, ctx: &CompletionContext, derive_input: } } -fn complete_lint(acc: &mut Completions, ctx: &CompletionContext, derive_input: ast::TokenTree, lints_completions: &[LintCompletion]) { +fn complete_lint( + acc: &mut Completions, + ctx: &CompletionContext, + derive_input: ast::TokenTree, + lints_completions: &[LintCompletion], +) { if let Ok(existing_lints) = parse_comma_sep_input(derive_input) { for lint_completion in lints_completions .into_iter() diff --git a/xtask/src/codegen.rs b/xtask/src/codegen.rs index 209caacc3d7..c7cac50fe88 100644 --- a/xtask/src/codegen.rs +++ b/xtask/src/codegen.rs @@ -26,7 +26,7 @@ pub use self::{ gen_unstable_future_descriptor::generate_unstable_future_descriptor, }; -// Directory used by xtask +// Directory used by xtask const STORAGE: &str = ".xtask"; const GRAMMAR_DIR: &str = "crates/ra_parser/src/grammar"; diff --git a/xtask/src/codegen/gen_unstable_future_descriptor.rs b/xtask/src/codegen/gen_unstable_future_descriptor.rs index 6dce8ba0adc..75b603d7df5 100644 --- a/xtask/src/codegen/gen_unstable_future_descriptor.rs +++ b/xtask/src/codegen/gen_unstable_future_descriptor.rs @@ -1,23 +1,27 @@ //! Generates descriptors structure for unstable feature from Unstable Book -use crate::{ - codegen::{self, project_root, Mode, Result}, -}; -use std::process::Command; -use std::fs; -use walkdir::WalkDir; -use quote::quote; use crate::codegen::update; +use crate::codegen::{self, project_root, Mode, Result}; +use quote::quote; +use std::fs; +use std::process::Command; +use walkdir::WalkDir; pub fn generate_unstable_future_descriptor(mode: Mode) -> Result<()> { let path = project_root().join(codegen::STORAGE); fs::create_dir_all(path.clone())?; Command::new("git").current_dir(path.clone()).arg("init").output()?; - Command::new("git").current_dir(path.clone()).args(&["remote", "add", "-f", "origin", codegen::REPOSITORY_URL]).output()?; - Command::new("git").current_dir(path.clone()).args(&["sparse-checkout", "set", "/src/doc/unstable-book/src/"]).output()?; + Command::new("git") + .current_dir(path.clone()) + .args(&["remote", "add", "-f", "origin", codegen::REPOSITORY_URL]) + .output()?; + Command::new("git") + .current_dir(path.clone()) + .args(&["sparse-checkout", "set", "/src/doc/unstable-book/src/"]) + .output()?; Command::new("git").current_dir(path.clone()).args(&["pull", "origin", "master"]).output()?; - //TODO: check git, and do pull + //TODO: check git, and do pull let src_dir = path.join("src/doc/unstable-book/src"); let files = WalkDir::new(src_dir.join("language-features")) @@ -26,18 +30,23 @@ pub fn generate_unstable_future_descriptor(mode: Mode) -> Result<()> { .filter_map(|e| e.ok()) .filter(|entry| { // Get all `.md ` files - entry.file_type().is_file() && entry.path().extension().map(|ext| ext == "md").unwrap_or(false) + entry.file_type().is_file() + && entry.path().extension().map(|ext| ext == "md").unwrap_or(false) + }) + .collect::>(); + + let definitions = files + .iter() + .map(|entry| { + let path = entry.path(); + let feature_ident = + format!("{}", path.file_stem().unwrap().to_str().unwrap().replace("-", "_")); + let doc = format!("{}", std::fs::read_to_string(path).unwrap()); + + quote! { LintCompletion { label: #feature_ident, description: #doc } } }) .collect::>(); - let definitions = files.iter().map(|entry| { - let path = entry.path(); - let feature_ident = format!("{}", path.file_stem().unwrap().to_str().unwrap().replace("-", "_")); - let doc = format!("{}", std::fs::read_to_string(path).unwrap() ); - - quote!{ LintCompletion { label: #feature_ident, description: #doc } } - }).collect::>(); - let ts = quote! { use crate::completion::LintCompletion; @@ -45,10 +54,10 @@ pub fn generate_unstable_future_descriptor(mode: Mode) -> Result<()> { #(#definitions),* ]; }; - + let destination = project_root().join(codegen::UNSTABLE_FEATURE); let contents = crate::reformat(ts.to_string())?; update(destination.as_path(), &contents, mode)?; Ok(()) -} \ No newline at end of file +}