diff --git a/Cargo.lock b/Cargo.lock index 0479869e7a..8ed284d47a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1792,6 +1792,7 @@ dependencies = [ "ruff_cache", "ruff_diagnostics", "ruff_macros", + "ruff_newlines", "ruff_python_ast", "ruff_python_semantic", "ruff_python_stdlib", @@ -1959,6 +1960,14 @@ dependencies = [ "textwrap", ] +[[package]] +name = "ruff_newlines" +version = "0.0.0" +dependencies = [ + "memchr", + "ruff_text_size", +] + [[package]] name = "ruff_python_ast" version = "0.0.0" @@ -1973,6 +1982,7 @@ dependencies = [ "num-bigint", "num-traits", "once_cell", + "ruff_newlines", "ruff_text_size", "rustc-hash", "rustpython-ast", @@ -1994,6 +2004,7 @@ dependencies = [ "itertools", "once_cell", "ruff_formatter", + "ruff_newlines", "ruff_python_ast", "ruff_testing_macros", "ruff_text_size", diff --git a/crates/ruff/Cargo.toml b/crates/ruff/Cargo.toml index cfdd4553cd..e13a694c97 100644 --- a/crates/ruff/Cargo.toml +++ b/crates/ruff/Cargo.toml @@ -17,6 +17,7 @@ name = "ruff" ruff_cache = { path = "../ruff_cache" } ruff_diagnostics = { path = "../ruff_diagnostics", features = ["serde"] } ruff_macros = { path = "../ruff_macros" } +ruff_newlines = { path = "../ruff_newlines" } ruff_python_ast = { path = "../ruff_python_ast", features = ["serde"] } ruff_python_semantic = { path = "../ruff_python_semantic" } ruff_python_stdlib = { path = "../ruff_python_stdlib" } diff --git a/crates/ruff/src/autofix/actions.rs b/crates/ruff/src/autofix/actions.rs index 95161c98ae..8166987395 100644 --- a/crates/ruff/src/autofix/actions.rs +++ b/crates/ruff/src/autofix/actions.rs @@ -9,8 +9,8 @@ use rustpython_parser::ast::{self, Excepthandler, Expr, Keyword, Ranged, Stmt}; use rustpython_parser::{lexer, Mode, Tok}; use ruff_diagnostics::Edit; +use ruff_newlines::NewlineWithTrailingNewline; use ruff_python_ast::helpers; -use ruff_python_ast::newlines::NewlineWithTrailingNewline; use ruff_python_ast::source_code::{Indexer, Locator, Stylist}; use crate::cst::helpers::compose_module_path; diff --git a/crates/ruff/src/checkers/physical_lines.rs b/crates/ruff/src/checkers/physical_lines.rs index 53b4704811..124821f221 100644 --- a/crates/ruff/src/checkers/physical_lines.rs +++ b/crates/ruff/src/checkers/physical_lines.rs @@ -4,7 +4,7 @@ use ruff_text_size::TextSize; use std::path::Path; use ruff_diagnostics::Diagnostic; -use ruff_python_ast::newlines::StrExt; +use ruff_newlines::StrExt; use ruff_python_ast::source_code::{Indexer, Locator, Stylist}; use crate::registry::Rule; diff --git a/crates/ruff/src/doc_lines.rs b/crates/ruff/src/doc_lines.rs index c85c3c871f..3e2de44920 100644 --- a/crates/ruff/src/doc_lines.rs +++ b/crates/ruff/src/doc_lines.rs @@ -8,7 +8,7 @@ use rustpython_parser::ast::{self, Constant, Expr, Ranged, Stmt, Suite}; use rustpython_parser::lexer::LexResult; use rustpython_parser::Tok; -use ruff_python_ast::newlines::UniversalNewlineIterator; +use ruff_newlines::UniversalNewlineIterator; use ruff_python_ast::source_code::Locator; use ruff_python_ast::statement_visitor::{walk_stmt, StatementVisitor}; diff --git a/crates/ruff/src/docstrings/sections.rs b/crates/ruff/src/docstrings/sections.rs index 5850389a7f..f1b4ced286 100644 --- a/crates/ruff/src/docstrings/sections.rs +++ b/crates/ruff/src/docstrings/sections.rs @@ -4,7 +4,7 @@ use std::iter::FusedIterator; use ruff_text_size::{TextLen, TextRange, TextSize}; use strum_macros::EnumIter; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use ruff_python_ast::whitespace; use crate::docstrings::styles::SectionStyle; diff --git a/crates/ruff/src/importer/insertion.rs b/crates/ruff/src/importer/insertion.rs index 54d69addcc..01dcfcae65 100644 --- a/crates/ruff/src/importer/insertion.rs +++ b/crates/ruff/src/importer/insertion.rs @@ -143,7 +143,7 @@ mod tests { use rustpython_parser::lexer::LexResult; use rustpython_parser::Parse; - use ruff_python_ast::newlines::LineEnding; + use ruff_newlines::LineEnding; use ruff_python_ast::source_code::{Locator, Stylist}; use super::Insertion; diff --git a/crates/ruff/src/noqa.rs b/crates/ruff/src/noqa.rs index 9dbf993ae3..62fcdf4b77 100644 --- a/crates/ruff/src/noqa.rs +++ b/crates/ruff/src/noqa.rs @@ -11,7 +11,7 @@ use regex::Regex; use ruff_text_size::{TextLen, TextRange, TextSize}; use ruff_diagnostics::Diagnostic; -use ruff_python_ast::newlines::LineEnding; +use ruff_newlines::LineEnding; use ruff_python_ast::source_code::Locator; use crate::codes::NoqaCode; @@ -514,7 +514,7 @@ mod tests { use ruff_text_size::{TextRange, TextSize}; use ruff_diagnostics::Diagnostic; - use ruff_python_ast::newlines::LineEnding; + use ruff_newlines::LineEnding; use ruff_python_ast::source_code::Locator; use crate::noqa::{add_noqa_inner, NoqaMapping, NOQA_LINE_REGEX}; diff --git a/crates/ruff/src/rules/flake8_return/helpers.rs b/crates/ruff/src/rules/flake8_return/helpers.rs index 1047785e28..652ac72050 100644 --- a/crates/ruff/src/rules/flake8_return/helpers.rs +++ b/crates/ruff/src/rules/flake8_return/helpers.rs @@ -1,7 +1,7 @@ use ruff_text_size::TextSize; use rustpython_parser::ast::{Expr, Ranged, Stmt}; -use ruff_python_ast::newlines::StrExt; +use ruff_newlines::StrExt; use ruff_python_ast::source_code::Locator; /// Return `true` if a function's return statement include at least one diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs index 05f3e41516..6fd981f521 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_if.rs @@ -5,11 +5,11 @@ use rustpython_parser::ast::{self, Cmpop, Constant, Expr, ExprContext, Ranged, S use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_newlines::StrExt; use ruff_python_ast::comparable::{ComparableConstant, ComparableExpr, ComparableStmt}; use ruff_python_ast::helpers::{ any_over_expr, contains_effect, first_colon_range, has_comments, has_comments_in, }; -use ruff_python_ast::newlines::StrExt; use ruff_python_semantic::model::SemanticModel; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs b/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs index 35a2bea786..84c041d0f8 100644 --- a/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs +++ b/crates/ruff/src/rules/flake8_simplify/rules/ast_with.rs @@ -5,8 +5,8 @@ use rustpython_parser::ast::{self, Ranged, Stmt, Withitem}; use ruff_diagnostics::{AutofixKind, Violation}; use ruff_diagnostics::{Diagnostic, Fix}; use ruff_macros::{derive_message_formats, violation}; +use ruff_newlines::StrExt; use ruff_python_ast::helpers::{first_colon_range, has_comments_in}; -use ruff_python_ast::newlines::StrExt; use crate::checkers::ast::Checker; use crate::line_width::LineWidth; diff --git a/crates/ruff/src/rules/isort/helpers.rs b/crates/ruff/src/rules/isort/helpers.rs index 4b86854272..3bfe398bbf 100644 --- a/crates/ruff/src/rules/isort/helpers.rs +++ b/crates/ruff/src/rules/isort/helpers.rs @@ -1,7 +1,7 @@ use rustpython_parser::ast::{Ranged, Stmt}; use rustpython_parser::{lexer, Mode, Tok}; -use ruff_python_ast::newlines::StrExt; +use ruff_newlines::StrExt; use ruff_python_ast::source_code::Locator; use crate::rules::isort::types::TrailingComma; diff --git a/crates/ruff/src/rules/pycodestyle/helpers.rs b/crates/ruff/src/rules/pycodestyle/helpers.rs index 519ec3040e..830eed6694 100644 --- a/crates/ruff/src/rules/pycodestyle/helpers.rs +++ b/crates/ruff/src/rules/pycodestyle/helpers.rs @@ -2,7 +2,7 @@ use ruff_text_size::{TextLen, TextRange}; use rustpython_parser::ast::{self, Cmpop, Expr}; use unicode_width::UnicodeWidthStr; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use ruff_python_ast::source_code::Generator; use crate::line_width::{LineLength, LineWidth, TabSize}; diff --git a/crates/ruff/src/rules/pycodestyle/rules/doc_line_too_long.rs b/crates/ruff/src/rules/pycodestyle/rules/doc_line_too_long.rs index 74e9480163..efca0844b2 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/doc_line_too_long.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/doc_line_too_long.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use crate::rules::pycodestyle::helpers::is_overlong; use crate::settings::Settings; diff --git a/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs b/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs index 36932fd5b4..43651820ae 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/lambda_assignment.rs @@ -3,8 +3,8 @@ use rustpython_parser::ast::{self, Arg, Arguments, Constant, Expr, Ranged, Stmt} use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_newlines::StrExt; use ruff_python_ast::helpers::{has_leading_content, has_trailing_content}; -use ruff_python_ast::newlines::StrExt; use ruff_python_ast::source_code::Generator; use ruff_python_ast::whitespace::leading_space; use ruff_python_semantic::model::SemanticModel; diff --git a/crates/ruff/src/rules/pycodestyle/rules/line_too_long.rs b/crates/ruff/src/rules/pycodestyle/rules/line_too_long.rs index a7307f09c6..3eb1e2b1e5 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/line_too_long.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/line_too_long.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use crate::rules::pycodestyle::helpers::is_overlong; use crate::settings::Settings; diff --git a/crates/ruff/src/rules/pycodestyle/rules/mixed_spaces_and_tabs.rs b/crates/ruff/src/rules/pycodestyle/rules/mixed_spaces_and_tabs.rs index a2a7966a40..cd85e1ed3e 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/mixed_spaces_and_tabs.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/mixed_spaces_and_tabs.rs @@ -2,7 +2,7 @@ use ruff_text_size::{TextLen, TextRange}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use ruff_python_ast::whitespace::leading_space; /// ## What it does diff --git a/crates/ruff/src/rules/pycodestyle/rules/tab_indentation.rs b/crates/ruff/src/rules/pycodestyle/rules/tab_indentation.rs index 6532be1fcf..2fa18315b6 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/tab_indentation.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/tab_indentation.rs @@ -2,7 +2,7 @@ use ruff_text_size::{TextLen, TextRange, TextSize}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use ruff_python_ast::source_code::Indexer; use ruff_python_ast::whitespace::leading_space; diff --git a/crates/ruff/src/rules/pycodestyle/rules/trailing_whitespace.rs b/crates/ruff/src/rules/pycodestyle/rules/trailing_whitespace.rs index f2b72d1fa5..d79b238efc 100644 --- a/crates/ruff/src/rules/pycodestyle/rules/trailing_whitespace.rs +++ b/crates/ruff/src/rules/pycodestyle/rules/trailing_whitespace.rs @@ -2,7 +2,7 @@ use ruff_text_size::{TextLen, TextRange, TextSize}; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; use crate::registry::Rule; use crate::settings::Settings; diff --git a/crates/ruff/src/rules/pydocstyle/helpers.rs b/crates/ruff/src/rules/pydocstyle/helpers.rs index 3925b0680a..9cc9d84e11 100644 --- a/crates/ruff/src/rules/pydocstyle/helpers.rs +++ b/crates/ruff/src/rules/pydocstyle/helpers.rs @@ -1,9 +1,9 @@ use std::collections::BTreeSet; +use ruff_newlines::StrExt; use ruff_python_ast::call_path::from_qualified_name; use ruff_python_ast::cast; use ruff_python_ast::helpers::map_callable; -use ruff_python_ast::newlines::StrExt; use ruff_python_ast::str::is_implicit_concatenation; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; use ruff_python_semantic::model::SemanticModel; diff --git a/crates/ruff/src/rules/pydocstyle/rules/blank_after_summary.rs b/crates/ruff/src/rules/pydocstyle/rules/blank_after_summary.rs index 830d5ec45e..35381b5a8d 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/blank_after_summary.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/blank_after_summary.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; diff --git a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs index 1f8634cc1a..b5fd96528d 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_class.rs @@ -3,7 +3,7 @@ use rustpython_parser::ast::Ranged; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs index c72b882d41..beb33af9d7 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/blank_before_after_function.rs @@ -5,7 +5,7 @@ use rustpython_parser::ast::Ranged; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/ends_with_period.rs b/crates/ruff/src/rules/pydocstyle/rules/ends_with_period.rs index cff4e62038..4dca6ae21f 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/ends_with_period.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/ends_with_period.rs @@ -3,7 +3,7 @@ use strum::IntoEnumIterator; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use crate::checkers::ast::Checker; use crate::docstrings::sections::SectionKind; diff --git a/crates/ruff/src/rules/pydocstyle/rules/ends_with_punctuation.rs b/crates/ruff/src/rules/pydocstyle/rules/ends_with_punctuation.rs index 1139d60e5d..d4cfa195e3 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/ends_with_punctuation.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/ends_with_punctuation.rs @@ -3,7 +3,7 @@ use strum::IntoEnumIterator; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{StrExt, UniversalNewlineIterator}; +use ruff_newlines::{StrExt, UniversalNewlineIterator}; use crate::checkers::ast::Checker; use crate::docstrings::sections::SectionKind; diff --git a/crates/ruff/src/rules/pydocstyle/rules/indent.rs b/crates/ruff/src/rules/pydocstyle/rules/indent.rs index 0cec2598d5..f3fc53a700 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/indent.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/indent.rs @@ -3,7 +3,7 @@ use ruff_text_size::{TextLen, TextRange}; use ruff_diagnostics::{AlwaysAutofixableViolation, Violation}; use ruff_diagnostics::{Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::NewlineWithTrailingNewline; +use ruff_newlines::NewlineWithTrailingNewline; use ruff_python_ast::whitespace; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs b/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs index 80c260c5aa..c15fe2c40b 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/multi_line_summary_start.rs @@ -3,7 +3,7 @@ use rustpython_parser::ast::Ranged; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{NewlineWithTrailingNewline, UniversalNewlineIterator}; +use ruff_newlines::{NewlineWithTrailingNewline, UniversalNewlineIterator}; use ruff_python_ast::str::{is_triple_quote, leading_quote}; use ruff_python_semantic::definition::{Definition, Member}; diff --git a/crates/ruff/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs b/crates/ruff/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs index 2461d4df89..10c3ff222e 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/newline_after_last_paragraph.rs @@ -3,7 +3,7 @@ use rustpython_parser::ast::Ranged; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::{NewlineWithTrailingNewline, StrExt}; +use ruff_newlines::{NewlineWithTrailingNewline, StrExt}; use ruff_python_ast::whitespace; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs b/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs index ccfbf599f5..fe6b538637 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/no_signature.rs @@ -2,7 +2,7 @@ use rustpython_parser::ast::{self, Stmt}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::StrExt; +use ruff_newlines::StrExt; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/no_surrounding_whitespace.rs b/crates/ruff/src/rules/pydocstyle/rules/no_surrounding_whitespace.rs index 8bd1682ffc..1125f0482b 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/no_surrounding_whitespace.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/no_surrounding_whitespace.rs @@ -2,7 +2,7 @@ use ruff_text_size::{TextLen, TextRange}; use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::NewlineWithTrailingNewline; +use ruff_newlines::NewlineWithTrailingNewline; use crate::checkers::ast::Checker; use crate::docstrings::Docstring; diff --git a/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs b/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs index a3df27817f..7df49c500c 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/non_imperative_mood.rs @@ -5,9 +5,9 @@ use once_cell::sync::Lazy; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; +use ruff_newlines::StrExt; use ruff_python_ast::call_path::{from_qualified_name, CallPath}; use ruff_python_ast::cast; -use ruff_python_ast::newlines::StrExt; use ruff_python_semantic::analyze::visibility::{is_property, is_test}; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; diff --git a/crates/ruff/src/rules/pydocstyle/rules/one_liner.rs b/crates/ruff/src/rules/pydocstyle/rules/one_liner.rs index 87ef30556b..6403d9578a 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/one_liner.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/one_liner.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{AutofixKind, Diagnostic, Edit, Fix, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::NewlineWithTrailingNewline; +use ruff_newlines::NewlineWithTrailingNewline; use ruff_python_ast::str::{leading_quote, trailing_quote}; use crate::checkers::ast::Checker; diff --git a/crates/ruff/src/rules/pydocstyle/rules/sections.rs b/crates/ruff/src/rules/pydocstyle/rules/sections.rs index 73099280b2..4412d7713e 100644 --- a/crates/ruff/src/rules/pydocstyle/rules/sections.rs +++ b/crates/ruff/src/rules/pydocstyle/rules/sections.rs @@ -8,8 +8,8 @@ use rustpython_parser::ast::{self, Stmt}; use ruff_diagnostics::{AlwaysAutofixableViolation, Violation}; use ruff_diagnostics::{Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; +use ruff_newlines::NewlineWithTrailingNewline; use ruff_python_ast::helpers::identifier_range; -use ruff_python_ast::newlines::NewlineWithTrailingNewline; use ruff_python_ast::{cast, whitespace}; use ruff_python_semantic::analyze::visibility::is_staticmethod; use ruff_python_semantic::definition::{Definition, Member, MemberKind}; diff --git a/crates/ruff/src/rules/pygrep_hooks/rules/blanket_noqa.rs b/crates/ruff/src/rules/pygrep_hooks/rules/blanket_noqa.rs index 23673721fe..540ccb6fc1 100644 --- a/crates/ruff/src/rules/pygrep_hooks/rules/blanket_noqa.rs +++ b/crates/ruff/src/rules/pygrep_hooks/rules/blanket_noqa.rs @@ -4,7 +4,7 @@ use ruff_text_size::{TextLen, TextRange, TextSize}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; /// ## What it does /// Check for `noqa` annotations that suppress all diagnostics, as opposed to diff --git a/crates/ruff/src/rules/pygrep_hooks/rules/blanket_type_ignore.rs b/crates/ruff/src/rules/pygrep_hooks/rules/blanket_type_ignore.rs index d16c9e7c22..f4675229e0 100644 --- a/crates/ruff/src/rules/pygrep_hooks/rules/blanket_type_ignore.rs +++ b/crates/ruff/src/rules/pygrep_hooks/rules/blanket_type_ignore.rs @@ -5,7 +5,7 @@ use ruff_text_size::{TextLen, TextRange, TextSize}; use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; /// ## What it does /// Check for `type: ignore` annotations that suppress all type warnings, as diff --git a/crates/ruff/src/rules/pylint/rules/bidirectional_unicode.rs b/crates/ruff/src/rules/pylint/rules/bidirectional_unicode.rs index 9b2cfe6fb3..1bf4583995 100644 --- a/crates/ruff/src/rules/pylint/rules/bidirectional_unicode.rs +++ b/crates/ruff/src/rules/pylint/rules/bidirectional_unicode.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; const BIDI_UNICODE: [char; 10] = [ '\u{202A}', //{LEFT-TO-RIGHT EMBEDDING} diff --git a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_coding_comment.rs b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_coding_comment.rs index 230b5bad0d..2da53041e4 100644 --- a/crates/ruff/src/rules/pyupgrade/rules/unnecessary_coding_comment.rs +++ b/crates/ruff/src/rules/pyupgrade/rules/unnecessary_coding_comment.rs @@ -3,7 +3,7 @@ use regex::Regex; use ruff_diagnostics::{AlwaysAutofixableViolation, Diagnostic, Edit, Fix}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::newlines::Line; +use ruff_newlines::Line; // TODO: document referencing [PEP 3120]: https://peps.python.org/pep-3120/ #[violation] diff --git a/crates/ruff_newlines/Cargo.toml b/crates/ruff_newlines/Cargo.toml new file mode 100644 index 0000000000..a2dfe8959d --- /dev/null +++ b/crates/ruff_newlines/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "ruff_newlines" +version = "0.0.0" +publish = false +edition = { workspace = true } +rust-version = { workspace = true } + +[lib] + +[dependencies] +ruff_text_size = { workspace = true } + +memchr = { workspace = true } diff --git a/crates/ruff_python_ast/src/newlines.rs b/crates/ruff_newlines/src/lib.rs similarity index 98% rename from crates/ruff_python_ast/src/newlines.rs rename to crates/ruff_newlines/src/lib.rs index bba0343d0a..18f9e26a63 100644 --- a/crates/ruff_python_ast/src/newlines.rs +++ b/crates/ruff_newlines/src/lib.rs @@ -22,7 +22,7 @@ impl StrExt for str { /// /// ```rust /// # use ruff_text_size::TextSize; -/// # use ruff_python_ast::newlines::{Line, UniversalNewlineIterator}; +/// # use ruff_newlines::{Line, UniversalNewlineIterator}; /// let mut lines = UniversalNewlineIterator::from("foo\nbar\n\r\nbaz\rbop"); /// /// assert_eq!(lines.next_back(), Some(Line::new("bop", TextSize::from(14)))); @@ -340,9 +340,7 @@ impl Deref for LineEnding { mod tests { use ruff_text_size::TextSize; - use crate::newlines::Line; - - use super::UniversalNewlineIterator; + use super::{Line, UniversalNewlineIterator}; #[test] fn universal_newlines_empty_str() { diff --git a/crates/ruff_python_ast/Cargo.toml b/crates/ruff_python_ast/Cargo.toml index ec569cd78c..5f5a53ef35 100644 --- a/crates/ruff_python_ast/Cargo.toml +++ b/crates/ruff_python_ast/Cargo.toml @@ -8,6 +8,7 @@ rust-version = { workspace = true } [lib] [dependencies] +ruff_newlines = { path = "../ruff_newlines" } ruff_text_size = { workspace = true } anyhow = { workspace = true } diff --git a/crates/ruff_python_ast/src/helpers.rs b/crates/ruff_python_ast/src/helpers.rs index 10142c7502..06c697dce3 100644 --- a/crates/ruff_python_ast/src/helpers.rs +++ b/crates/ruff_python_ast/src/helpers.rs @@ -4,6 +4,7 @@ use std::path::Path; use itertools::Itertools; use log::error; use num_traits::Zero; +use ruff_newlines::UniversalNewlineIterator; use ruff_text_size::{TextRange, TextSize}; use rustc_hash::{FxHashMap, FxHashSet}; use rustpython_parser::ast::{ @@ -14,7 +15,6 @@ use rustpython_parser::{lexer, Mode, Tok}; use smallvec::SmallVec; use crate::call_path::CallPath; -use crate::newlines::UniversalNewlineIterator; use crate::source_code::{Indexer, Locator}; use crate::statement_visitor::{walk_body, walk_stmt, StatementVisitor}; diff --git a/crates/ruff_python_ast/src/lib.rs b/crates/ruff_python_ast/src/lib.rs index 632de88a9e..77bb89fa1a 100644 --- a/crates/ruff_python_ast/src/lib.rs +++ b/crates/ruff_python_ast/src/lib.rs @@ -5,7 +5,6 @@ pub mod comparable; pub mod hashable; pub mod helpers; pub mod imports; -pub mod newlines; pub mod node; pub mod prelude; pub mod relocate; diff --git a/crates/ruff_python_ast/src/source_code/comment_ranges.rs b/crates/ruff_python_ast/src/source_code/comment_ranges.rs index 75deeb1b75..cbbb414b54 100644 --- a/crates/ruff_python_ast/src/source_code/comment_ranges.rs +++ b/crates/ruff_python_ast/src/source_code/comment_ranges.rs @@ -1,8 +1,9 @@ -use ruff_text_size::TextRange; -use rustpython_parser::Tok; use std::fmt::{Debug, Formatter}; use std::ops::Deref; +use ruff_text_size::TextRange; +use rustpython_parser::Tok; + /// Stores the ranges of comments sorted by [`TextRange::start`] in increasing order. No two ranges are overlapping. #[derive(Clone)] pub struct CommentRanges { diff --git a/crates/ruff_python_ast/src/source_code/generator.rs b/crates/ruff_python_ast/src/source_code/generator.rs index 90a52da108..61e5a96999 100644 --- a/crates/ruff_python_ast/src/source_code/generator.rs +++ b/crates/ruff_python_ast/src/source_code/generator.rs @@ -8,7 +8,8 @@ use rustpython_parser::ast::{ Excepthandler, Expr, Identifier, MatchCase, Operator, Pattern, Stmt, Suite, Withitem, }; -use crate::newlines::LineEnding; +use ruff_newlines::LineEnding; + use crate::source_code::stylist::{Indentation, Quote, Stylist}; mod precedence { @@ -1459,7 +1460,8 @@ mod tests { use rustpython_ast::Suite; use rustpython_parser::Parse; - use crate::newlines::LineEnding; + use ruff_newlines::LineEnding; + use crate::source_code::stylist::{Indentation, Quote}; use crate::source_code::Generator; diff --git a/crates/ruff_python_ast/src/source_code/indexer.rs b/crates/ruff_python_ast/src/source_code/indexer.rs index f134640c86..6cfdf693ca 100644 --- a/crates/ruff_python_ast/src/source_code/indexer.rs +++ b/crates/ruff_python_ast/src/source_code/indexer.rs @@ -1,11 +1,11 @@ //! Struct used to index source code, to enable efficient lookup of tokens that //! are omitted from the AST (e.g., commented lines). -use crate::source_code::comment_ranges::{CommentRanges, CommentRangesBuilder}; use ruff_text_size::{TextRange, TextSize}; use rustpython_parser::lexer::LexResult; use rustpython_parser::{StringKind, Tok}; +use crate::source_code::comment_ranges::{CommentRanges, CommentRangesBuilder}; use crate::source_code::Locator; pub struct Indexer { diff --git a/crates/ruff_python_ast/src/source_code/locator.rs b/crates/ruff_python_ast/src/source_code/locator.rs index 58dd92f233..cf4faedc81 100644 --- a/crates/ruff_python_ast/src/source_code/locator.rs +++ b/crates/ruff_python_ast/src/source_code/locator.rs @@ -6,7 +6,8 @@ use memchr::{memchr2, memrchr2}; use once_cell::unsync::OnceCell; use ruff_text_size::{TextLen, TextRange, TextSize}; -use crate::newlines::find_newline; +use ruff_newlines::find_newline; + use crate::source_code::{LineIndex, OneIndexed, SourceCode, SourceLocation}; pub struct Locator<'a> { diff --git a/crates/ruff_python_ast/src/source_code/mod.rs b/crates/ruff_python_ast/src/source_code/mod.rs index 8341f07c35..acd988c02e 100644 --- a/crates/ruff_python_ast/src/source_code/mod.rs +++ b/crates/ruff_python_ast/src/source_code/mod.rs @@ -7,13 +7,13 @@ use rustpython_parser::{ast, lexer, Mode, Parse, ParseError}; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; +pub use comment_ranges::{CommentRanges, CommentRangesBuilder}; pub use generator::Generator; pub use indexer::Indexer; pub use locator::Locator; pub use stylist::{Quote, Stylist}; pub use crate::source_code::line_index::{LineIndex, OneIndexed}; -pub use comment_ranges::{CommentRanges, CommentRangesBuilder}; mod comment_ranges; mod generator; diff --git a/crates/ruff_python_ast/src/source_code/stylist.rs b/crates/ruff_python_ast/src/source_code/stylist.rs index 237b619b57..e0c09ad31a 100644 --- a/crates/ruff_python_ast/src/source_code/stylist.rs +++ b/crates/ruff_python_ast/src/source_code/stylist.rs @@ -4,11 +4,11 @@ use std::fmt; use std::ops::Deref; use once_cell::unsync::OnceCell; +use ruff_newlines::{find_newline, LineEnding}; use rustpython_literal::escape::Quote as StrQuote; use rustpython_parser::lexer::LexResult; use rustpython_parser::Tok; -use crate::newlines::{find_newline, LineEnding}; use crate::source_code::Locator; use crate::str::leading_quote; @@ -166,7 +166,8 @@ mod tests { use rustpython_parser::lexer::lex; use rustpython_parser::Mode; - use crate::newlines::{find_newline, LineEnding}; + use ruff_newlines::{find_newline, LineEnding}; + use crate::source_code::stylist::{Indentation, Quote}; use crate::source_code::{Locator, Stylist}; diff --git a/crates/ruff_python_formatter/Cargo.toml b/crates/ruff_python_formatter/Cargo.toml index b07d4e9a31..15e3d215a4 100644 --- a/crates/ruff_python_formatter/Cargo.toml +++ b/crates/ruff_python_formatter/Cargo.toml @@ -7,6 +7,7 @@ rust-version = { workspace = true } [dependencies] ruff_formatter = { path = "../ruff_formatter" } +ruff_newlines = { path = "../ruff_newlines" } ruff_python_ast = { path = "../ruff_python_ast" } ruff_text_size = { workspace = true }