aboutsummaryrefslogtreecommitdiff
path: root/xtask/src/codegen.rs
diff options
context:
space:
mode:
Diffstat (limited to 'xtask/src/codegen.rs')
-rw-r--r--xtask/src/codegen.rs30
1 files changed, 15 insertions, 15 deletions
diff --git a/xtask/src/codegen.rs b/xtask/src/codegen.rs
index 45b17bb48..adea053b6 100644
--- a/xtask/src/codegen.rs
+++ b/xtask/src/codegen.rs
@@ -9,23 +9,22 @@ mod gen_syntax;
9mod gen_parser_tests; 9mod gen_parser_tests;
10mod gen_assists_docs; 10mod gen_assists_docs;
11mod gen_feature_docs; 11mod gen_feature_docs;
12mod gen_features; 12mod gen_lint_completions;
13mod gen_diagnostic_docs;
13 14
14use std::{ 15use std::{
15 fmt, mem, 16 fmt, mem,
16 path::{Path, PathBuf}, 17 path::{Path, PathBuf},
17}; 18};
19use xshell::{cmd, pushenv, read_file, write_file};
18 20
19use crate::{ 21use crate::{ensure_rustfmt, project_root, Result};
20 ensure_rustfmt,
21 not_bash::{fs2, pushenv, run},
22 project_root, Result,
23};
24 22
25pub use self::{ 23pub use self::{
26 gen_assists_docs::{generate_assists_docs, generate_assists_tests}, 24 gen_assists_docs::{generate_assists_docs, generate_assists_tests},
25 gen_diagnostic_docs::generate_diagnostic_docs,
27 gen_feature_docs::generate_feature_docs, 26 gen_feature_docs::generate_feature_docs,
28 gen_features::generate_features, 27 gen_lint_completions::generate_lint_completions,
29 gen_parser_tests::generate_parser_tests, 28 gen_parser_tests::generate_parser_tests,
30 gen_syntax::generate_syntax, 29 gen_syntax::generate_syntax,
31}; 30};
@@ -43,13 +42,14 @@ pub struct CodegenCmd {
43impl CodegenCmd { 42impl CodegenCmd {
44 pub fn run(self) -> Result<()> { 43 pub fn run(self) -> Result<()> {
45 if self.features { 44 if self.features {
46 generate_features(Mode::Overwrite)?; 45 generate_lint_completions(Mode::Overwrite)?;
47 } 46 }
48 generate_syntax(Mode::Overwrite)?; 47 generate_syntax(Mode::Overwrite)?;
49 generate_parser_tests(Mode::Overwrite)?; 48 generate_parser_tests(Mode::Overwrite)?;
50 generate_assists_tests(Mode::Overwrite)?; 49 generate_assists_tests(Mode::Overwrite)?;
51 generate_assists_docs(Mode::Overwrite)?; 50 generate_assists_docs(Mode::Overwrite)?;
52 generate_feature_docs(Mode::Overwrite)?; 51 generate_feature_docs(Mode::Overwrite)?;
52 generate_diagnostic_docs(Mode::Overwrite)?;
53 Ok(()) 53 Ok(())
54 } 54 }
55} 55}
@@ -57,7 +57,7 @@ impl CodegenCmd {
57/// A helper to update file on disk if it has changed. 57/// A helper to update file on disk if it has changed.
58/// With verify = false, 58/// With verify = false,
59fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> { 59fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
60 match fs2::read_to_string(path) { 60 match read_file(path) {
61 Ok(old_contents) if normalize(&old_contents) == normalize(contents) => { 61 Ok(old_contents) if normalize(&old_contents) == normalize(contents) => {
62 return Ok(()); 62 return Ok(());
63 } 63 }
@@ -67,7 +67,7 @@ fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
67 anyhow::bail!("`{}` is not up-to-date", path.display()); 67 anyhow::bail!("`{}` is not up-to-date", path.display());
68 } 68 }
69 eprintln!("updating {}", path.display()); 69 eprintln!("updating {}", path.display());
70 fs2::write(path, contents)?; 70 write_file(path, contents)?;
71 return Ok(()); 71 return Ok(());
72 72
73 fn normalize(s: &str) -> String { 73 fn normalize(s: &str) -> String {
@@ -77,13 +77,13 @@ fn update(path: &Path, contents: &str, mode: Mode) -> Result<()> {
77 77
78const PREAMBLE: &str = "Generated file, do not edit by hand, see `xtask/src/codegen`"; 78const PREAMBLE: &str = "Generated file, do not edit by hand, see `xtask/src/codegen`";
79 79
80fn reformat(text: impl std::fmt::Display) -> Result<String> { 80fn reformat(text: &str) -> Result<String> {
81 let _e = pushenv("RUSTUP_TOOLCHAIN", "stable"); 81 let _e = pushenv("RUSTUP_TOOLCHAIN", "stable");
82 ensure_rustfmt()?; 82 ensure_rustfmt()?;
83 let stdout = run!( 83 let rustfmt_toml = project_root().join("rustfmt.toml");
84 "rustfmt --config-path {} --config fn_single_line=true", project_root().join("rustfmt.toml").display(); 84 let stdout = cmd!("rustfmt --config-path {rustfmt_toml} --config fn_single_line=true")
85 <text.to_string().as_bytes() 85 .stdin(text)
86 )?; 86 .read()?;
87 Ok(format!("//! {}\n\n{}\n", PREAMBLE, stdout)) 87 Ok(format!("//! {}\n\n{}\n", PREAMBLE, stdout))
88} 88}
89 89