-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1c02fcd
commit df2f4be
Showing
5 changed files
with
42 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,12 @@ | ||
mod comment_ranges; | ||
mod cursor; | ||
mod pragmas; | ||
pub mod textwrap; | ||
mod tokenizer; | ||
mod whitespace; | ||
|
||
pub use comment_ranges::CommentRanges; | ||
pub use cursor::*; | ||
pub use pragmas::*; | ||
pub use tokenizer::*; | ||
pub use whitespace::*; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/// Returns `true` if a comment appears to be a pragma comment. | ||
/// | ||
/// ``` | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# type: ignore")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# noqa: F401")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# noqa")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# NoQA")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# nosec")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# nosec B602, B607")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# isort: off")); | ||
/// assert!(ruff_python_trivia::is_pragma_comment("# isort: skip")); | ||
/// ``` | ||
pub fn is_pragma_comment(comment: &str) -> bool { | ||
let Some(content) = comment.strip_prefix('#') else { | ||
return false; | ||
}; | ||
let trimmed = content.trim_start(); | ||
|
||
// Case-insensitive match against `noqa` (which doesn't require a trailing colon). | ||
matches!( | ||
trimmed.as_bytes(), | ||
[b'n' | b'N', b'o' | b'O', b'q' | b'Q', b'a' | b'A', ..] | ||
) || | ||
// Case-insensitive match against pragmas that don't require a trailing colon. | ||
trimmed.starts_with("nosec") || | ||
// Case-sensitive match against a variety of pragmas that _do_ require a trailing colon. | ||
trimmed | ||
.split_once(':') | ||
.is_some_and(|(maybe_pragma, _)| matches!(maybe_pragma, "isort" | "type" | "pyright" | "pylint" | "flake8" | "ruff")) | ||
} |