Mention that generated .adocs are generaterd

This commit is contained in:
Aleksey Kladov 2020-08-17 15:49:46 +02:00
parent 0b2b9a5508
commit b82d967182
5 changed files with 26 additions and 21 deletions

View file

@ -15,7 +15,11 @@ use std::{
path::{Path, PathBuf}, path::{Path, PathBuf},
}; };
use crate::{not_bash::fs2, project_root, Result}; use crate::{
ensure_rustfmt,
not_bash::{fs2, pushenv, run},
project_root, Result,
};
pub use self::{ pub use self::{
gen_assists_docs::{generate_assists_docs, generate_assists_tests}, gen_assists_docs::{generate_assists_docs, generate_assists_tests},
@ -62,6 +66,18 @@ fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
} }
} }
const PREAMBLE: &str = "Generated file, do not edit by hand, see `xtask/src/codegen`";
fn reformat(text: impl std::fmt::Display) -> Result<String> {
let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
ensure_rustfmt()?;
let stdout = run!(
"rustfmt --config-path {} --config fn_single_line=true", project_root().join("rustfmt.toml").display();
<text.to_string().as_bytes()
)?;
Ok(format!("//! {}\n\n{}\n", PREAMBLE, stdout))
}
fn extract_comment_blocks(text: &str) -> Vec<Vec<String>> { fn extract_comment_blocks(text: &str) -> Vec<Vec<String>> {
do_extract_comment_blocks(text, false).into_iter().map(|(_line, block)| block).collect() do_extract_comment_blocks(text, false).into_iter().map(|(_line, block)| block).collect()
} }

View file

@ -3,7 +3,7 @@
use std::{fmt, fs, path::Path}; use std::{fmt, fs, path::Path};
use crate::{ use crate::{
codegen::{self, extract_comment_blocks_with_empty_lines, Location, Mode}, codegen::{self, extract_comment_blocks_with_empty_lines, reformat, Location, Mode, PREAMBLE},
project_root, rust_files, Result, project_root, rust_files, Result,
}; };
@ -15,7 +15,7 @@ pub fn generate_assists_tests(mode: Mode) -> Result<()> {
pub fn generate_assists_docs(mode: Mode) -> Result<()> { pub fn generate_assists_docs(mode: Mode) -> Result<()> {
let assists = Assist::collect()?; let assists = Assist::collect()?;
let contents = assists.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n"); let contents = assists.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n");
let contents = contents.trim().to_string() + "\n"; let contents = format!("//{}\n{}\n", PREAMBLE, contents.trim());
let dst = project_root().join("docs/user/generated_assists.adoc"); let dst = project_root().join("docs/user/generated_assists.adoc");
codegen::update(&dst, &contents, mode) codegen::update(&dst, &contents, mode)
} }
@ -134,7 +134,7 @@ r#####"
buf.push_str(&test) buf.push_str(&test)
} }
let buf = crate::reformat(buf)?; let buf = reformat(buf)?;
codegen::update(&project_root().join(codegen::ASSISTS_TESTS), &buf, mode) codegen::update(&project_root().join(codegen::ASSISTS_TESTS), &buf, mode)
} }

View file

@ -3,14 +3,14 @@
use std::{fmt, fs, path::PathBuf}; use std::{fmt, fs, path::PathBuf};
use crate::{ use crate::{
codegen::{self, extract_comment_blocks_with_empty_lines, Location, Mode}, codegen::{self, extract_comment_blocks_with_empty_lines, Location, Mode, PREAMBLE},
project_root, rust_files, Result, project_root, rust_files, Result,
}; };
pub fn generate_feature_docs(mode: Mode) -> Result<()> { pub fn generate_feature_docs(mode: Mode) -> Result<()> {
let features = Feature::collect()?; let features = Feature::collect()?;
let contents = features.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n"); let contents = features.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n");
let contents = contents.trim().to_string() + "\n"; let contents = format!("//{}\n{}\n", PREAMBLE, contents.trim());
let dst = project_root().join("docs/user/generated_features.adoc"); let dst = project_root().join("docs/user/generated_features.adoc");
codegen::update(&dst, &contents, mode)?; codegen::update(&dst, &contents, mode)?;
Ok(()) Ok(())

View file

@ -14,7 +14,7 @@ use ungrammar::{rust_grammar, Grammar, Rule};
use crate::{ use crate::{
ast_src::{AstEnumSrc, AstNodeSrc, AstSrc, Cardinality, Field, KindsSrc, KINDS_SRC}, ast_src::{AstEnumSrc, AstNodeSrc, AstSrc, Cardinality, Field, KindsSrc, KINDS_SRC},
codegen::{self, update, Mode}, codegen::{self, reformat, update, Mode},
project_root, Result, project_root, Result,
}; };
@ -61,7 +61,7 @@ fn generate_tokens(grammar: &AstSrc) -> Result<String> {
} }
}); });
let pretty = crate::reformat(quote! { let pretty = reformat(quote! {
use crate::{SyntaxKind::{self, *}, SyntaxToken, ast::AstToken}; use crate::{SyntaxKind::{self, *}, SyntaxToken, ast::AstToken};
#(#tokens)* #(#tokens)*
})? })?
@ -261,7 +261,7 @@ fn generate_nodes(kinds: KindsSrc<'_>, grammar: &AstSrc) -> Result<String> {
} }
} }
let pretty = crate::reformat(res)?; let pretty = reformat(res)?;
Ok(pretty) Ok(pretty)
} }
@ -383,7 +383,7 @@ fn generate_syntax_kinds(grammar: KindsSrc<'_>) -> Result<String> {
} }
}; };
crate::reformat(ast) reformat(ast)
} }
fn to_upper_snake_case(s: &str) -> String { fn to_upper_snake_case(s: &str) -> String {

View file

@ -62,17 +62,6 @@ pub fn run_rustfmt(mode: Mode) -> Result<()> {
Ok(()) Ok(())
} }
fn reformat(text: impl std::fmt::Display) -> Result<String> {
let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
ensure_rustfmt()?;
let stdout = run!(
"rustfmt --config-path {} --config fn_single_line=true", project_root().join("rustfmt.toml").display();
<text.to_string().as_bytes()
)?;
let preamble = "Generated file, do not edit by hand, see `xtask/src/codegen`";
Ok(format!("//! {}\n\n{}\n", preamble, stdout))
}
fn ensure_rustfmt() -> Result<()> { fn ensure_rustfmt() -> Result<()> {
let out = run!("rustfmt --version")?; let out = run!("rustfmt --version")?;
if !out.contains("stable") { if !out.contains("stable") {