From e82c2457b42c93f92b235d9461a7ba09ed92bd76 Mon Sep 17 00:00:00 2001 From: Tshepang Mbambo Date: Sat, 30 Jul 2022 21:58:09 +0200 Subject: [PATCH] address review comment https://github.com/rust-lang/rustc-dev-guide/pull/1394#issuecomment-1189105017 --- ci/date-check/src/main.rs | 173 +++++++++++++----- src/backend/backend-agnostic.md | 2 +- src/backend/updating-llvm.md | 4 +- .../region_inference/member_constraints.md | 2 +- src/contributing.md | 24 ++- src/conventions.md | 2 +- src/crates-io.md | 2 +- src/diagnostics/diagnostic-items.md | 2 +- src/diagnostics/lintstore.md | 2 +- src/diagnostics/translation.md | 2 +- src/git.md | 2 +- src/llvm-coverage-instrumentation.md | 5 +- src/opaque-types-type-alias-impl-trait.md | 2 +- src/overview.md | 2 +- src/parallel-rustc.md | 8 +- src/profiling.md | 2 +- .../query-evaluation-model-in-detail.md | 2 +- src/query.md | 2 +- src/rustc-driver-getting-diagnostics.md | 2 +- src/rustc-driver-interacting-with-the-ast.md | 2 +- src/rustdoc-internals.md | 2 +- src/salsa.md | 2 +- src/tests/compiletest.md | 2 +- src/the-parser.md | 2 +- src/thir.md | 2 +- src/traits/chalk.md | 2 +- src/traits/resolution.md | 2 +- src/type-inference.md | 2 +- 28 files changed, 179 insertions(+), 81 deletions(-) diff --git a/ci/date-check/src/main.rs b/ci/date-check/src/main.rs index bb92f019..2a9da89e 100644 --- a/ci/date-check/src/main.rs +++ b/ci/date-check/src/main.rs @@ -8,7 +8,7 @@ use std::{ use chrono::{Datelike as _, Month, TimeZone as _, Utc}; use glob::glob; -use regex::Regex; +use regex::{Regex, RegexSet}; #[derive(Debug, Copy, Clone, PartialEq, Eq)] struct Date { @@ -36,41 +36,56 @@ impl fmt::Display for Date { } } -fn make_date_regex() -> Regex { - Regex::new(r"[aA]s\s+of\s+(\w+)\s+(\d{4})").unwrap() -} - -fn collect_dates_from_file(date_regex: &Regex, text: &str) -> Vec<(usize, Date)> { - let mut line = 1; - let mut end_of_last_cap = 0; - date_regex - .captures_iter(text) - .map(|cap| { - ( - cap.get(0).unwrap().range(), - Date { - year: cap[2].parse().unwrap(), - month: Month::from_str(&cap[1]).unwrap().number_from_month(), - }, - ) - }) - .map(|(byte_range, date)| { - line += text[end_of_last_cap..byte_range.end] - .chars() - .filter(|c| *c == '\n') - .count(); - end_of_last_cap = byte_range.end; - (line, date) - }) +fn make_date_regex() -> Vec { + let patterns = [ + r"", + r"\s+(\w+)\s+(\d+{4})", + ]; + let set = RegexSet::new(&patterns).unwrap(); + set.patterns() + .iter() + .map(|pattern| Regex::new(pattern).unwrap()) .collect() } +fn collect_dates_from_file(date_regexes: &[Regex], text: &str) -> Vec<(usize, Date)> { + let mut output = Vec::new(); + for date_regex in date_regexes { + let mut line = 1; + let mut end_of_last_cap = 0; + let results: Vec<_> = date_regex + .captures_iter(text) + .filter_map(|cap| { + if let (Some(year), Some(month)) = (cap.get(2), cap.get(1)) { + let year = year.as_str().parse().expect("year"); + let month = Month::from_str(month.as_str()) + .expect("month") + .number_from_month(); + Some((cap.get(0).expect("all").range(), Date { year, month })) + } else { + None + } + }) + .map(|(byte_range, date)| { + line += text[end_of_last_cap..byte_range.end] + .chars() + .filter(|c| *c == '\n') + .count(); + end_of_last_cap = byte_range.end; + (line, date) + }) + .collect(); + output.extend(results); + } + output +} + fn collect_dates(paths: impl Iterator) -> BTreeMap> { - let date_regex = make_date_regex(); + let date_regexes = make_date_regex(); let mut data = BTreeMap::new(); for path in paths { let text = fs::read_to_string(&path).unwrap(); - let dates = collect_dates_from_file(&date_regex, &text); + let dates = collect_dates_from_file(&date_regexes, &text); if !dates.is_empty() { data.insert(path, dates); } @@ -174,59 +189,129 @@ mod tests { #[test] fn test_date_regex() { - let regex = make_date_regex(); - assert!(regex.is_match("As of July 2022")); - assert!(regex.is_match("As of Jul 2022")); - assert!(regex.is_match("As of july 2022")); - assert!(regex.is_match("As of jul 2022")); - assert!(regex.is_match("as of jul 2022")); + let regexes = &make_date_regex(); + assert!(regexes[0].is_match("")); + assert!(regexes[0].is_match("")); + assert!(regexes[0].is_match("")); + assert!(regexes[0].is_match("")); + assert!(regexes[1].is_match(" jan 2021")); + assert!(regexes[1].is_match(" january 2021")); + assert!(regexes[1].is_match(" Jan 2021")); + assert!(regexes[1].is_match(" January 2021")); } #[test] fn test_collect_dates_from_file() { - let text = "Test1\nAs of Jan 2021\nTest2\nAs of Feb 2021 \ - \nTest3\nTest4\nAs of march 2021Bar\nas of apr 2021 \ - \nTest5\nTest6\nTest7\n\n\nas of\n\n may 2021\nTest8 + let text = r" +Test1 + +Test2 +Foo +Test3 +Test4 +FooBar + +Test5 +Test6 +Test7 + +Test8 +Test1 + jan 2021 +Test2 +Foo february 2021 +Test3 +Test4 +Foo mar 2021 Bar + apr 2021 +Test5 +Test6 +Test7 + may 2021 +Test8 \ "; assert_eq!( collect_dates_from_file(&make_date_regex(), text), vec![ ( - 2, + 3, Date { year: 2021, month: 1, } ), ( - 4, + 6, Date { year: 2021, month: 2, } ), ( - 7, + 9, Date { year: 2021, month: 3, } ), ( - 8, + 11, Date { year: 2021, month: 4, } ), ( - 16, + 17, Date { year: 2021, month: 5, } ), - ] + ( + 20, + Date { + year: 2021, + month: 1, + } + ), + ( + 23, + Date { + year: 2021, + month: 2, + } + ), + ( + 26, + Date { + year: 2021, + month: 3, + } + ), + ( + 28, + Date { + year: 2021, + month: 4, + } + ), + ( + 34, + Date { + year: 2021, + month: 5, + } + ), + ], ); } } diff --git a/src/backend/backend-agnostic.md b/src/backend/backend-agnostic.md index 17a1e8f7..c88f06f8 100644 --- a/src/backend/backend-agnostic.md +++ b/src/backend/backend-agnostic.md @@ -2,7 +2,7 @@ -As of October 2021, `rustc_codegen_ssa` provides an +As of October 2021, `rustc_codegen_ssa` provides an abstract interface for all backends to implement, to allow other codegen backends (e.g. [Cranelift]). diff --git a/src/backend/updating-llvm.md b/src/backend/updating-llvm.md index 0de0767b..8c9c60f5 100644 --- a/src/backend/updating-llvm.md +++ b/src/backend/updating-llvm.md @@ -66,8 +66,8 @@ Example PRs look like: ## Feature updates -> Note that this information is as of the time of this writing (October 2021). The process for updating LLVM changes with +> Note that this information is as of the time of this writing, + October 2021. The process for updating LLVM changes with practically all LLVM updates, so this may be out of date! Unlike bugfixes, updating to pick up a new feature of LLVM typically requires a diff --git a/src/borrow_check/region_inference/member_constraints.md b/src/borrow_check/region_inference/member_constraints.md index 77776986..e236e012 100644 --- a/src/borrow_check/region_inference/member_constraints.md +++ b/src/borrow_check/region_inference/member_constraints.md @@ -94,7 +94,7 @@ member constraints come in. ## Choices are always lifetime parameters At present, the "choice" regions from a member constraint are always lifetime -parameters from the current function. As of October 2021, +parameters from the current function. As of October 2021, this falls out from the placement of impl Trait, though in the future it may not be the case. We take some advantage of this fact, as it simplifies the current code. In particular, we don't have to consider a case like `'0 member of ['1, diff --git a/src/contributing.md b/src/contributing.md index 0a868c93..6c445763 100644 --- a/src/contributing.md +++ b/src/contributing.md @@ -437,17 +437,29 @@ Just a few things to keep in mind: the project. - The date the comment was added, e.g. instead of writing _"Currently, ..."_ - or _"As of now, ..."_, consider writing - _"As of January 2021, ..."_. - We have a CI action (in `~/.github/workflows/date-check.yml`) - that generates a monthly issue with any of these that are over 6 months old. - - The following formats are accepted: + or _"As of now, ..."_, + consider adding the date, in one of the following formats: - Jan 2021 - January 2021 - jan 2021 - january 2021 + There is a CI action (in "~/.github/workflows/date-check.yml") + that generates a monthly issue with any of these that are over 6 months old. + + For the action to pick the date, add this annotation: + + + + Example: + + As of Jul 2022, the foo did the bar. + + For cases where the date should not be part of the visible rendered output, + use the following instead: + + + - A link to a relevant WG, tracking issue, `rustc` rustdoc page, or similar, that may provide further explanation for the change process or a way to verify that the information is not outdated. diff --git a/src/conventions.md b/src/conventions.md index 0f51fefc..0d5f17b9 100644 --- a/src/conventions.md +++ b/src/conventions.md @@ -21,7 +21,7 @@ Formatting is checked by the `tidy` script. It runs automatically when you do If you want to use format-on-save in your editor, the pinned version of `rustfmt` is built under `build//stage0/bin/rustfmt`. You'll have to -pass the `--edition=2021` argument yourself when calling +pass the `--edition=2021` argument yourself when calling `rustfmt` directly. [fmt]: https://github.com/rust-dev-tools/fmt-rfcs diff --git a/src/crates-io.md b/src/crates-io.md index d7c7f25e..83751c94 100644 --- a/src/crates-io.md +++ b/src/crates-io.md @@ -12,7 +12,7 @@ reasons: - The dependency may have transitive dependencies that have one of the above problems. -As of February 2022, there is no official policy for vetting +As of February 2022, there is no official policy for vetting new dependencies to the compiler. Generally, new dependencies are not added to the compiler unless there is a good reason to do so. diff --git a/src/diagnostics/diagnostic-items.md b/src/diagnostics/diagnostic-items.md index 0717444c..d83f079d 100644 --- a/src/diagnostics/diagnostic-items.md +++ b/src/diagnostics/diagnostic-items.md @@ -43,7 +43,7 @@ A new diagnostic item can be added with these two steps: For the naming conventions of diagnostic items, please refer to [*Naming Conventions*](#naming-conventions). -2. As of February 2022, diagnostic items in code are +2. As of February 2022, diagnostic items in code are accessed via symbols in [`rustc_span::symbol::sym`]. To add your newly created diagnostic item simply open the module file and add the name (In this case `Cat`) at the correct point in the list. diff --git a/src/diagnostics/lintstore.md b/src/diagnostics/lintstore.md index 78b6da27..2ba5d677 100644 --- a/src/diagnostics/lintstore.md +++ b/src/diagnostics/lintstore.md @@ -17,7 +17,7 @@ default lint level and other metadata come from. These are normally defined by way of the [`declare_lint!`] macro, which boils down to a static with type `&rustc_session::lint::Lint`. -As of February 2022, we lint against direct declarations +As of February 2022, we lint against direct declarations without the use of the macro today (although this may change in the future, as the macro is somewhat unwieldy to add new fields to, like all macros). diff --git a/src/diagnostics/translation.md b/src/diagnostics/translation.md index 07599f51..86ce6854 100644 --- a/src/diagnostics/translation.md +++ b/src/diagnostics/translation.md @@ -217,7 +217,7 @@ returned by `Emitter::fluent_bundle`. This bundle is used preferentially when translating messages, the fallback bundle is only used if the primary bundle is missing a message or not provided. -As of June 2022, there are no locale bundles +As of June 2022, there are no locale bundles distributed with the compiler, but mechanisms are implemented for loading bundles. diff --git a/src/git.md b/src/git.md index a32e3cd4..d32274c6 100644 --- a/src/git.md +++ b/src/git.md @@ -157,7 +157,7 @@ no changes added to commit (use "git add" and/or "git commit -a") These changes are not changes to files: they are changes to submodules (more on this [later](#git-submodules)). To get rid of those, run `git submodule update` (or run any `x.py` command, which will automatically update the submodules). -Note that there is (as of February 2022) a [bug][#77620] if you use +Note that there is (as of February 2022) a [bug][#77620] if you use worktrees, submodules, and `x.py` in a commit hook. If you run into an error like: diff --git a/src/llvm-coverage-instrumentation.md b/src/llvm-coverage-instrumentation.md index d6d3880b..b186f482 100644 --- a/src/llvm-coverage-instrumentation.md +++ b/src/llvm-coverage-instrumentation.md @@ -222,9 +222,10 @@ properly-configured variables in LLVM IR, according to very specific details of the [_LLVM Coverage Mapping Format_][coverage-mapping-format] (Version 6).[^llvm-and-covmap-versions] -[^llvm-and-covmap-versions]: The Rust compiler (as of December 2021) +[^llvm-and-covmap-versions]: The Rust compiler (as of December 2021) supports _LLVM Coverage Mapping Format_ Version 5 or 6. Version 5 -was introduced in _LLVM 12_, which is (as of this writing) the minimum LLVM +was introduced in _LLVM 12_, +which is (as of this writing) the minimum LLVM version supported by the current version of Rust. Version 6 was introduced in _LLVM 13_, which is currently the default LLVM version for Rust. The Rust compiler will automatically use the most up-to-date coverage mapping format diff --git a/src/opaque-types-type-alias-impl-trait.md b/src/opaque-types-type-alias-impl-trait.md index a2d513a6..956f5682 100644 --- a/src/opaque-types-type-alias-impl-trait.md +++ b/src/opaque-types-type-alias-impl-trait.md @@ -15,7 +15,7 @@ it implements `Bar`. Therefore, any of `Bar`'s interface can be used on a `Foo`, but nothing else (regardless of whether it implements any other traits). Since there needs to be a concrete background type, -you can (as of January 2021) express that type +you can (as of January 2021) express that type by using the opaque type in a "defining use site". ```rust,ignore diff --git a/src/overview.md b/src/overview.md index fb49c863..c7da9254 100644 --- a/src/overview.md +++ b/src/overview.md @@ -292,7 +292,7 @@ Moreover, the compiler wasn't originally built to use a query system; the query system has been retrofitted into the compiler, so parts of it are not query-fied yet. Also, LLVM isn't our code, so that isn't querified either. The plan is to eventually query-fy all of the steps listed in the previous section, -but as of November 2021, only the steps between HIR and +but as of November 2021, only the steps between HIR and LLVM IR are query-fied. That is, lexing, parsing, name resolution, and macro expansion are done all at once for the whole program. diff --git a/src/parallel-rustc.md b/src/parallel-rustc.md index 4400e2b6..a69bdec9 100644 --- a/src/parallel-rustc.md +++ b/src/parallel-rustc.md @@ -1,6 +1,6 @@ # Parallel Compilation -As of May 2022, The only stage of the compiler +As of May 2022, The only stage of the compiler that is already parallel is codegen. The nightly compiler implements query evaluation, but there is still a lot of work to be done. The lack of parallelism at other stages also represents an opportunity for improving compiler performance. One can try out the current @@ -54,13 +54,13 @@ When a query `foo` is evaluated, the cache table for `foo` is locked. ## Rustdoc -As of May 2022, there are still a number of steps +As of May 2022, there are still a number of steps to complete before rustdoc rendering can be made parallel. More details on this issue can be found [here][parallel-rustdoc]. ## Current Status -As of May 2022, work on explicitly parallelizing the +As of May 2022, work on explicitly parallelizing the compiler has stalled. There is a lot of design and correctness work that needs to be done. @@ -76,7 +76,7 @@ These are the basic ideas in the effort to make `rustc` parallel: [`rayon`]: https://crates.io/crates/rayon -As of May 2022, much of this effort is on hold due +As of May 2022, much of this effort is on hold due to lack of manpower. We have a working prototype with promising performance gains in many cases. However, there are two blockers: diff --git a/src/profiling.md b/src/profiling.md index f0fc76f5..e1666e23 100644 --- a/src/profiling.md +++ b/src/profiling.md @@ -108,6 +108,6 @@ The llvm-lines output is affected by several options. MIR optimizations have little impact. Compared to the default `RUSTFLAGS="-Z mir-opt-level=1"`, level 0 adds 0.3GB and level 2 removes 0.2GB. -As of July 2022, +As of July 2022, inlining happens in LLVM and GCC codegen backends, missing only in the Cranelift one. diff --git a/src/queries/query-evaluation-model-in-detail.md b/src/queries/query-evaluation-model-in-detail.md index 43ffe0a1..8a08f1e0 100644 --- a/src/queries/query-evaluation-model-in-detail.md +++ b/src/queries/query-evaluation-model-in-detail.md @@ -76,7 +76,7 @@ executed, no results are cached. But the context already provides access to "input" data, i.e. pieces of immutable data that were computed before the context was created and that queries can access to do their computations. -As of January 2021, this input data consists mainly of +As of January 2021, this input data consists mainly of the HIR map, upstream crate metadata, and the command-line options the compiler was invoked with; but in the future inputs will just consist of command-line options and a list of source files -- the HIR map will itself be provided by a diff --git a/src/query.md b/src/query.md index 222e9074..3d60059b 100644 --- a/src/query.md +++ b/src/query.md @@ -3,7 +3,7 @@ As described in [the high-level overview of the compiler][hl], the Rust compiler -is still (as of July 2021) transitioning from a +is still (as of July 2021) transitioning from a traditional "pass-based" setup to a "demand-driven" system. The compiler query system is the key to rustc's demand-driven organization. The idea is pretty simple. Instead of entirely independent passes diff --git a/src/rustc-driver-getting-diagnostics.md b/src/rustc-driver-getting-diagnostics.md index bac16138..5ce93c3d 100644 --- a/src/rustc-driver-getting-diagnostics.md +++ b/src/rustc-driver-getting-diagnostics.md @@ -7,7 +7,7 @@ To get diagnostics from the compiler, configure `rustc_interface::Config` to output diagnostic to a buffer, and run `TyCtxt.analysis`. The following was tested -with `nightly-2022-06-05` (See [here][example] +with `nightly-2022-06-05` (See [here][example] for the complete example): [example]: https://github.com/rust-lang/rustc-dev-guide/blob/master/examples/rustc-driver-getting-diagnostics.rs diff --git a/src/rustc-driver-interacting-with-the-ast.md b/src/rustc-driver-interacting-with-the-ast.md index 7eae2fb7..ce53f386 100644 --- a/src/rustc-driver-interacting-with-the-ast.md +++ b/src/rustc-driver-interacting-with-the-ast.md @@ -5,7 +5,7 @@ ## Getting the type of an expression To get the type of an expression, use the `global_ctxt` to get a `TyCtxt`. -The following was tested with `nightly-2022-06-05` +The following was tested with `nightly-2022-06-05` (see [here][example] for the complete example): [example]: https://github.com/rust-lang/rustc-dev-guide/blob/master/examples/rustc-driver-interacting-with-the-ast.rs diff --git a/src/rustdoc-internals.md b/src/rustdoc-internals.md index 1ac74b11..f21c8725 100644 --- a/src/rustdoc-internals.md +++ b/src/rustdoc-internals.md @@ -66,7 +66,7 @@ these passes, please let us know!) [44136]: https://github.com/rust-lang/rust/issues/44136 -Here is the list of passes as of May 2022: +Here is the list of passes as of May 2022: - `calculate-doc-coverage` calculates information used for the `--show-coverage` flag. diff --git a/src/salsa.md b/src/salsa.md index 96215186..872308e7 100644 --- a/src/salsa.md +++ b/src/salsa.md @@ -9,7 +9,7 @@ want to watch [Salsa In More Depth](https://www.youtube.com/watch?v=i_IhACacPRY), also by Niko Matsakis. -> As of April 2022, although Salsa is inspired by +> As of April 2022, although Salsa is inspired by > (among other things) rustc's query system, it is not used directly in rustc. > It _is_ used in chalk and extensively in `rust-analyzer`, but there are no > medium or long-term concrete plans to integrate it into the compiler. diff --git a/src/tests/compiletest.md b/src/tests/compiletest.md index a01fc4de..70cef2ad 100644 --- a/src/tests/compiletest.md +++ b/src/tests/compiletest.md @@ -452,7 +452,7 @@ fn main() { ## Revisions -Certain classes of tests support "revisions" (as of July 2022, +Certain classes of tests support "revisions" (as of July 2022, this includes UI, assembly, codegen, debuginfo, incremental, and rustdoc UI tests, though incremental tests are somewhat different). Revisions allow a single test file to be used for multiple tests. diff --git a/src/the-parser.md b/src/the-parser.md index c37083c7..3482d2d7 100644 --- a/src/the-parser.md +++ b/src/the-parser.md @@ -1,6 +1,6 @@ # Lexing and Parsing -As of January 2021, the lexer and parser are undergoing +As of January 2021, the lexer and parser are undergoing refactoring to allow extracting them into libraries. The very first thing the compiler does is take the program (in Unicode diff --git a/src/thir.md b/src/thir.md index 2f75f4c7..04af75f9 100644 --- a/src/thir.md +++ b/src/thir.md @@ -4,7 +4,7 @@ The THIR ("Typed High-Level Intermediate Representation"), previously called HAIR for "High-Level Abstract IR", is another IR used by rustc that is generated after -[type checking]. It is (as of April 2022) only used for +[type checking]. It is (as of April 2022) only used for [MIR construction] and [exhaustiveness checking]. There is also [an experimental unsafety checker][thir-unsafeck] that operates on the THIR as a replacement for the current MIR unsafety checker, and can be used instead of the MIR unsafety checker by passing diff --git a/src/traits/chalk.md b/src/traits/chalk.md index 3708f6b3..78deb367 100644 --- a/src/traits/chalk.md +++ b/src/traits/chalk.md @@ -1,7 +1,7 @@ # Chalk-based trait solving [Chalk][chalk] is an experimental trait solver for Rust that is -(as of May 2022) under development by the [Types team]. +(as of May 2022) under development by the [Types team]. Its goal is to enable a lot of trait system features and bug fixes that are hard to implement (e.g. GATs or specialization). If you would like to help in hacking on the new solver, drop by on the rust-lang Zulip in the [`#t-types`] diff --git a/src/traits/resolution.md b/src/traits/resolution.md index 0ffcc7ee..195fe605 100644 --- a/src/traits/resolution.md +++ b/src/traits/resolution.md @@ -120,7 +120,7 @@ the obligation contains unbound inference variables. The subroutines that decide whether a particular impl/where-clause/etc applies to a particular obligation are collectively referred to as the process of -_matching_. As of May 2022, this amounts to unifying +_matching_. As of May 2022, this amounts to unifying the `Self` types, but in the future we may also recursively consider some of the nested obligations, in the case of an impl. diff --git a/src/type-inference.md b/src/type-inference.md index e4fc248e..c3467a3a 100644 --- a/src/type-inference.md +++ b/src/type-inference.md @@ -72,7 +72,7 @@ inference works, or perhaps this blog post on [Unification in the Chalk project]: http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/ All told, the inference context stores five kinds of inference variables -(as of June 2021): +(as of June 2021): - Type variables, which come in three varieties: - General type variables (the most common). These can be unified with any