Skip to content

Commit bf96731

Browse files
Add config option generated_marker_line_search_limit (#5993)
`generated_marker_line_search_limit` allows users to configure how many lines rustfmt should search for an `@generated` marker comment when `format_generated_files=false` --------- Co-authored-by: Jordan Eldredge <jordan@jordaneldredge.com>
1 parent 6356fca commit bf96731

14 files changed

+110
-5
lines changed

Configurations.md

+12-2
Original file line numberDiff line numberDiff line change
@@ -1050,15 +1050,25 @@ Max width for code snippets included in doc comments. Only used if [`format_code
10501050

10511051
## `format_generated_files`
10521052

1053-
Format generated files. A file is considered generated
1054-
if any of the first five lines contain a `@generated` comment marker.
1053+
Format generated files. A file is considered generated if any of the first several lines contain a `@generated` comment marker. The number of lines to check is configured by `generated_marker_line_search_limit`.
1054+
10551055
By default, generated files are reformatted, i. e. `@generated` marker is ignored.
10561056
This option is currently ignored for stdin (`@generated` in stdin is ignored.)
10571057

10581058
- **Default value**: `true`
10591059
- **Possible values**: `true`, `false`
10601060
- **Stable**: No (tracking issue: [#5080](https://github.com/rust-lang/rustfmt/issues/5080))
10611061

1062+
## `generated_marker_line_search_limit`
1063+
1064+
Number of lines to check for a `@generated` pragma header, starting from the top of the file. Setting this value to `0` will treat all files as non-generated. When`format_generated_files` is `true`, this option has no effect.
1065+
1066+
- **Default value**: `5`
1067+
- **Possible values**: any positive integer
1068+
- **Stable**: No (tracking issue: [#5080](https://github.com/rust-lang/rustfmt/issues/5080))
1069+
1070+
See also [format_generated_files](#format_generated_files) link here.
1071+
10621072
## `format_macro_matchers`
10631073

10641074
Format the metavariable matching patterns in macros.

src/config/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ create_config! {
151151
"Write an item and its attribute on the same line \
152152
if their combined width is below a threshold";
153153
format_generated_files: bool, true, false, "Format generated files";
154+
generated_marker_line_search_limit: usize, 5, false, "Number of lines to check for a \
155+
`@generated` marker when `format_generated_files` is enabled";
154156

155157
// Options that can change the source code beyond whitespace/blocks (somewhat linty things)
156158
merge_derives: bool, true, true, "Merge multiple `#[derive(...)]` into a single one";
@@ -680,6 +682,7 @@ edition = "2015"
680682
version = "One"
681683
inline_attribute_width = 0
682684
format_generated_files = true
685+
generated_marker_line_search_limit = 5
683686
merge_derives = true
684687
use_try_shorthand = false
685688
use_field_init_shorthand = false

src/formatting.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fn should_skip_module<T: FormatHandler>(
8282
let source_file = context.parse_session.span_to_file_contents(module.span);
8383
let src = source_file.src.as_ref().expect("SourceFile without src");
8484

85-
if is_generated_file(src) {
85+
if is_generated_file(src, config) {
8686
return true;
8787
}
8888
}

src/formatting/generated.rs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
use crate::Config;
2+
13
/// Returns `true` if the given span is a part of generated files.
2-
pub(super) fn is_generated_file(original_snippet: &str) -> bool {
4+
pub(super) fn is_generated_file(original_snippet: &str, config: &Config) -> bool {
35
original_snippet
46
.lines()
5-
.take(5) // looking for marker only in the beginning of the file
7+
// looking for marker only in the beginning of the file
8+
.take(config.generated_marker_line_search_limit())
69
.any(|line| line.contains("@generated"))
710
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 15
3+
4+
fn main()
5+
{
6+
println!("hello, world")
7+
;
8+
}
9+
10+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 1
3+
4+
fn main()
5+
{
6+
println!("hello, world")
7+
;
8+
}
9+
10+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 0
3+
4+
// @generated
5+
fn main() {
6+
println!("hello, world")
7+
;
8+
}
9+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// rustfmt-format_generated_files: true
2+
// rustfmt-generated_marker_line_search_limit: 20
3+
4+
fn main()
5+
{
6+
println!("hello, world")
7+
;
8+
}
9+
10+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// rustfmt-format_generated_files: true
2+
3+
fn main()
4+
{
5+
println!("hello, world")
6+
;
7+
}
8+
9+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 15
3+
4+
fn main()
5+
{
6+
println!("hello, world")
7+
;
8+
}
9+
10+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 1
3+
4+
fn main() {
5+
println!("hello, world");
6+
}
7+
8+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// rustfmt-format_generated_files: false
2+
// rustfmt-generated_marker_line_search_limit: 0
3+
4+
// @generated
5+
fn main() {
6+
println!("hello, world");
7+
}
8+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// rustfmt-format_generated_files: true
2+
// rustfmt-generated_marker_line_search_limit: 20
3+
4+
fn main() {
5+
println!("hello, world");
6+
}
7+
8+
// @generated
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// rustfmt-format_generated_files: true
2+
3+
fn main() {
4+
println!("hello, world");
5+
}
6+
7+
// @generated

0 commit comments

Comments
 (0)