mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-12 14:48:16 +00:00
Use source type to determine parser mode for formatting (#8205)
## Summary This PR fixes the bug where if a Notebook contained IPython syntax, then the format command would fail. This was because the correct mode was not being used while parsing through the formatter code path. ## Test Plan This PR isn't the only requirement for Notebook formatting to start working with IPython escape commands. The following PR in the stack is required as well.
This commit is contained in:
parent
31032f4f70
commit
c2ec5f0bc9
4 changed files with 25 additions and 17 deletions
|
@ -7,7 +7,7 @@ use ruff_python_ast::AstNode;
|
|||
use ruff_python_ast::Mod;
|
||||
use ruff_python_index::tokens_and_ranges;
|
||||
use ruff_python_parser::lexer::LexicalError;
|
||||
use ruff_python_parser::{parse_ok_tokens, Mode, ParseError};
|
||||
use ruff_python_parser::{parse_ok_tokens, AsMode, ParseError};
|
||||
use ruff_python_trivia::CommentRanges;
|
||||
use ruff_source_file::Locator;
|
||||
|
||||
|
@ -130,8 +130,9 @@ pub fn format_module_source(
|
|||
source: &str,
|
||||
options: PyFormatOptions,
|
||||
) -> Result<Printed, FormatModuleError> {
|
||||
let (tokens, comment_ranges) = tokens_and_ranges(source)?;
|
||||
let module = parse_ok_tokens(tokens, source, Mode::Module, "<filename>")?;
|
||||
let source_type = options.source_type();
|
||||
let (tokens, comment_ranges) = tokens_and_ranges(source, source_type)?;
|
||||
let module = parse_ok_tokens(tokens, source, source_type.as_mode(), "<filename>")?;
|
||||
let formatted = format_module_ast(&module, &comment_ranges, source, options)?;
|
||||
Ok(formatted.print()?)
|
||||
}
|
||||
|
@ -172,9 +173,10 @@ mod tests {
|
|||
use anyhow::Result;
|
||||
use insta::assert_snapshot;
|
||||
|
||||
use ruff_python_ast::PySourceType;
|
||||
use ruff_python_index::tokens_and_ranges;
|
||||
|
||||
use ruff_python_parser::{parse_ok_tokens, Mode};
|
||||
use ruff_python_parser::{parse_ok_tokens, AsMode};
|
||||
|
||||
use crate::{format_module_ast, format_module_source, PyFormatOptions};
|
||||
|
||||
|
@ -213,11 +215,12 @@ def main() -> None:
|
|||
]
|
||||
|
||||
"#;
|
||||
let (tokens, comment_ranges) = tokens_and_ranges(source).unwrap();
|
||||
let source_type = PySourceType::Python;
|
||||
let (tokens, comment_ranges) = tokens_and_ranges(source, source_type).unwrap();
|
||||
|
||||
// Parse the AST.
|
||||
let source_path = "code_inline.py";
|
||||
let module = parse_ok_tokens(tokens, source, Mode::Module, source_path).unwrap();
|
||||
let module = parse_ok_tokens(tokens, source, source_type.as_mode(), source_path).unwrap();
|
||||
let options = PyFormatOptions::from_extension(Path::new(source_path));
|
||||
let formatted = format_module_ast(&module, &comment_ranges, source, options).unwrap();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue