diff --git a/crates/ruff_linter/resources/test/fixtures/pycodestyle/E501.py b/crates/ruff_linter/resources/test/fixtures/pycodestyle/E501.py index 6738ad51d55a2b..7c3dc583422f98 100644 --- a/crates/ruff_linter/resources/test/fixtures/pycodestyle/E501.py +++ b/crates/ruff_linter/resources/test/fixtures/pycodestyle/E501.py @@ -82,3 +82,8 @@ class Bar: """ This is a long sentence that ends with a shortened URL and, therefore, could easily be broken across multiple lines ([source](https://ruff.rs)) """ + + +# OK +# SPDX-FileCopyrightText: Copyright 2012-2015 Charlie Marsh +# SPDX-License-Identifier: a very long license identifier that exceeds the line length limit diff --git a/crates/ruff_linter/src/rules/pycodestyle/overlong.rs b/crates/ruff_linter/src/rules/pycodestyle/overlong.rs index 950bafa0554a56..cb1988746c283d 100644 --- a/crates/ruff_linter/src/rules/pycodestyle/overlong.rs +++ b/crates/ruff_linter/src/rules/pycodestyle/overlong.rs @@ -53,7 +53,7 @@ impl Overlong { }; let mut chunks = line.split_whitespace(); - let (Some(_), Some(second_chunk)) = (chunks.next(), chunks.next()) else { + let (Some(first_chunk), Some(second_chunk)) = (chunks.next(), chunks.next()) else { // Single word / no printable chars - no way to make the line shorter. return None; }; @@ -67,6 +67,15 @@ impl Overlong { } } + // Do not enforce the line length limit for SPDX license headers, which are machine-readable + // and explicitly _not_ recommended to wrap over multiple lines. + if matches!( + (first_chunk, second_chunk), + ("#", "SPDX-License-Identifier:" | "SPDX-FileCopyrightText:") + ) { + return None; + } + // Obtain the start offset of the part of the line that exceeds the limit. let mut start_offset = line.start(); let mut start_width = LineWidthBuilder::new(tab_size);