From 4f2134cc33f07c09fe166cec42971828843bc0ef Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 2 May 2020 01:18:19 +0200 Subject: Introduce EffectExpr --- xtask/src/codegen/gen_syntax.rs | 1 + 1 file changed, 1 insertion(+) (limited to 'xtask/src/codegen') diff --git a/xtask/src/codegen/gen_syntax.rs b/xtask/src/codegen/gen_syntax.rs index e9dc09552..8028575c5 100644 --- a/xtask/src/codegen/gen_syntax.rs +++ b/xtask/src/codegen/gen_syntax.rs @@ -432,6 +432,7 @@ impl Field<'_> { ":" => "colon", "::" => "coloncolon", "#" => "pound", + "?" => "question_mark", _ => name, }; format_ident!("{}_token", name) -- cgit v1.2.3 From eea431180eb5267928c8e0d4b8099ab1042e01d1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 6 May 2020 10:21:35 +0200 Subject: Regenerate --- xtask/src/codegen/gen_assists_docs.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'xtask/src/codegen') diff --git a/xtask/src/codegen/gen_assists_docs.rs b/xtask/src/codegen/gen_assists_docs.rs index 31d606535..4bd6b5f0c 100644 --- a/xtask/src/codegen/gen_assists_docs.rs +++ b/xtask/src/codegen/gen_assists_docs.rs @@ -101,14 +101,14 @@ fn collect_assists() -> Result> { } fn generate_tests(assists: &[Assist], mode: Mode) -> Result<()> { - let mut buf = String::from("use super::check;\n"); + let mut buf = String::from("use super::check_doc_test;\n"); for assist in assists.iter() { let test = format!( r######" #[test] fn doctest_{}() {{ - check( + check_doc_test( "{}", r#####" {}"#####, r#####" -- cgit v1.2.3 From e0e384a34ab06b18c76f8020df149bef392c04c7 Mon Sep 17 00:00:00 2001 From: veetaha Date: Wed, 22 Apr 2020 04:15:55 +0300 Subject: Add ast docs to codegen script --- xtask/src/codegen/gen_syntax.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'xtask/src/codegen') diff --git a/xtask/src/codegen/gen_syntax.rs b/xtask/src/codegen/gen_syntax.rs index 8028575c5..19d5594f5 100644 --- a/xtask/src/codegen/gen_syntax.rs +++ b/xtask/src/codegen/gen_syntax.rs @@ -3,7 +3,7 @@ //! Specifically, it generates the `SyntaxKind` enum and a number of newtype //! wrappers around `SyntaxNode` which implement `ra_syntax::AstNode`. -use std::collections::HashSet; +use std::{collections::HashSet, fmt::Write}; use proc_macro2::{Punct, Spacing}; use quote::{format_ident, quote}; @@ -102,6 +102,7 @@ fn generate_nodes(kinds: KindsSrc<'_>, grammar: AstSrc<'_>) -> Result { }); ( quote! { + #[pretty_doc_comment_placeholder_workaround] #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct #name { pub(crate) syntax: SyntaxNode, @@ -145,6 +146,7 @@ fn generate_nodes(kinds: KindsSrc<'_>, grammar: AstSrc<'_>) -> Result { ( quote! { + #[pretty_doc_comment_placeholder_workaround] #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum #name { #(#variants(#variants),)* @@ -230,10 +232,29 @@ fn generate_nodes(kinds: KindsSrc<'_>, grammar: AstSrc<'_>) -> Result { }; let ast = ast.to_string().replace("T ! [ ", "T![").replace(" ] )", "])"); - let pretty = crate::reformat(ast)?.replace("#[derive", "\n#[derive"); + + let mut res = String::with_capacity(ast.len() * 2); + + let mut docs = + grammar.nodes.iter().map(|it| it.doc).chain(grammar.enums.iter().map(|it| it.doc)); + + for chunk in ast.split("# [ pretty_doc_comment_placeholder_workaround ]") { + res.push_str(chunk); + if let Some(doc) = docs.next() { + write_doc_comment(doc, &mut res); + } + } + + let pretty = crate::reformat(res)?; Ok(pretty) } +fn write_doc_comment(contents: &[&str], dest: &mut String) { + for line in contents { + writeln!(dest, "///{}", line).unwrap(); + } +} + fn generate_syntax_kinds(grammar: KindsSrc<'_>) -> Result { let (single_byte_tokens_values, single_byte_tokens): (Vec<_>, Vec<_>) = grammar .punct -- cgit v1.2.3