mirror of https://github.com/astral-sh/ruff
Fix replace_whitespace() tabulation to space (#4226)
Co-authored-by: Micha Reiser <micha@reiser.io>
This commit is contained in:
parent
4d5a339d9e
commit
1b1788c8ad
|
|
@ -245,36 +245,39 @@ impl Display for MessageCodeFrame<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn replace_whitespace(source: &str, annotation_range: TextRange) -> SourceCode {
|
fn replace_whitespace(source: &str, annotation_range: TextRange) -> SourceCode {
|
||||||
static TAB_SIZE: TextSize = TextSize::new(4);
|
static TAB_SIZE: u32 = 4; // TODO(jonathan): use `pycodestyle.tab-size`
|
||||||
|
|
||||||
let mut result = String::new();
|
let mut result = String::new();
|
||||||
let mut last_end = 0;
|
let mut last_end = 0;
|
||||||
let mut range = annotation_range;
|
let mut range = annotation_range;
|
||||||
let mut column = 0;
|
let mut column = 0;
|
||||||
|
|
||||||
for (index, m) in source.match_indices(['\t', '\n', '\r']) {
|
for (index, c) in source.chars().enumerate() {
|
||||||
match m {
|
match c {
|
||||||
"\t" => {
|
'\t' => {
|
||||||
let tab_width = TAB_SIZE - TextSize::new(column % 4);
|
let tab_width = TAB_SIZE - column % TAB_SIZE;
|
||||||
|
column += tab_width;
|
||||||
|
|
||||||
if index < usize::from(annotation_range.start()) {
|
if index < usize::from(annotation_range.start()) {
|
||||||
range += tab_width - TextSize::new(1);
|
range += TextSize::new(tab_width - 1);
|
||||||
} else if index < usize::from(annotation_range.end()) {
|
} else if index < usize::from(annotation_range.end()) {
|
||||||
range = range.add_end(tab_width - TextSize::new(1));
|
range = range.add_end(TextSize::new(tab_width - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
result.push_str(&source[last_end..index]);
|
result.push_str(&source[last_end..index]);
|
||||||
|
|
||||||
for _ in 0..u32::from(tab_width) {
|
for _ in 0..tab_width {
|
||||||
result.push(' ');
|
result.push(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
last_end = index + 1;
|
last_end = index + 1;
|
||||||
}
|
}
|
||||||
"\n" | "\r" => {
|
'\n' | '\r' => {
|
||||||
column = 0;
|
column = 0;
|
||||||
}
|
}
|
||||||
_ => unreachable!(),
|
_ => {
|
||||||
|
column += 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ E101.py:15:1: E101 Indentation contains mixed spaces and tabs
|
||||||
15 | def func_mixed_start_with_space():
|
15 | def func_mixed_start_with_space():
|
||||||
16 | # E101
|
16 | # E101
|
||||||
17 | print("mixed starts with space")
|
17 | print("mixed starts with space")
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ E101
|
| ^^^^^^^^^^^^^^^ E101
|
||||||
18 |
|
18 |
|
||||||
19 | def xyz():
|
19 | def xyz():
|
||||||
|
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ E101.py:19:1: E101 Indentation contains mixed spaces and tabs
|
||||||
19 | def xyz():
|
19 | def xyz():
|
||||||
20 | # E101
|
20 | # E101
|
||||||
21 | print("xyz");
|
21 | print("xyz");
|
||||||
| ^^^^^^^ E101
|
| ^^^^ E101
|
||||||
|
|
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue