Fix mispositioned span in suggestions with wide characters#47407
Fix mispositioned span in suggestions with wide characters#47407bors merged 6 commits intorust-lang:masterfrom
Conversation
|
r? @estebank (rust_highfive has picked a reviewer for you, use r? to override) |
| # fn main() {} // don't insert it for us; that'll break imports | ||
| ``` | ||
| " | ||
| "explanation": null |
There was a problem hiding this comment.
Why is the explanation deleted?
There was a problem hiding this comment.
@kennytm it was failing locally. Just thought I'll push and see what happens
b23c516 to
eb1ada2
Compare
src/librustc_errors/emitter.rs
Outdated
| }); | ||
| let underline_start = span_start_pos.col.0 + start; | ||
| let underline_start = span_start_pos.col_display + start; | ||
| let underline_end = span_start_pos.col.0 + start + sub_len; |
There was a problem hiding this comment.
I think you need to change this line too to use col_display.
|
Please add an ui test with both the tab and emoji cases. |
|
Have made the suggested changes. Investigating why it is not working for the emoji example. |
estebank
left a comment
There was a problem hiding this comment.
Some tidy check errors to fix:
[00:03:36] tidy error: /checkout/src/test/ui/issue-47377-1.rs:13: line longer than 100 chars
[00:03:36] tidy error: /checkout/src/test/ui/issue-47377-1.rs: missing trailing newline
[00:03:36] tidy error: /checkout/src/test/ui/issue-47377.rs:13: line longer than 100 chars
[00:03:36] tidy error: /checkout/src/test/ui/issue-47377.rs: missing trailing newline
[00:03:37] some tidy checks failed
src/test/ui/issue-47377-1.rs
Outdated
|
|
||
| fn main(){ | ||
| let b = "hello"; | ||
| println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!"; //~ERROR 13:37: 13:51: binary operation `+` cannot be applied to type `&str` [E0369] |
There was a problem hiding this comment.
Move the error check to the line below
There was a problem hiding this comment.
Also you should probably use 4 spaces of indentation here, as well as rename the file to issue-47380.rs.
src/test/ui/issue-47377.rs
Outdated
|
|
||
| fn main(){ | ||
| let b = "hello"; | ||
| let _a = b + ", World!"; //~ERROR 13:14: 13:28: binary operation `+` cannot be applied to type `&str` [E0369] |
There was a problem hiding this comment.
Move the error check to the line below (//~^ ERROR binary operation...)
src/test/ui/issue-47377.rs
Outdated
| fn main(){ | ||
| let b = "hello"; | ||
| let _a = b + ", World!"; //~ERROR 13:14: 13:28: binary operation `+` cannot be applied to type `&str` [E0369] | ||
| } No newline at end of file |
There was a problem hiding this comment.
Add new line (your editor should be doing this by default).
src/test/ui/issue-47377.rs
Outdated
| // except according to those terms. | ||
|
|
||
| fn main(){ | ||
| let b = "hello"; |
There was a problem hiding this comment.
This file doesn't use tabs. You need to change the indentation of these two lines to use tabs and then add a line // ignore-tidy-tab to get tidy passing, like done in src/test/ui/codemap_tests/tab_2.rs.
There was a problem hiding this comment.
@est31 I changed it to ~^ ERROR E0369 }. Do I still need //ignore-tidy-tab?
There was a problem hiding this comment.
I think ignore-tidy-tab is so that the tidy check for the project doesn't block the merge of the PR, while keeping the tabs in the code so that we avoid regressions in the handling of them. I believe your editor might be "helpfully" replacing tabs with spaces.
There was a problem hiding this comment.
Yeah it was. Can you have a look now?
src/test/ui/issue-47377.rs
Outdated
| // except according to those terms. | ||
|
|
||
| fn main(){ | ||
| let b = "hello"; |
There was a problem hiding this comment.
I think ignore-tidy-tab is so that the tidy check for the project doesn't block the merge of the PR, while keeping the tabs in the code so that we avoid regressions in the handling of them. I believe your editor might be "helpfully" replacing tabs with spaces.
src/test/ui/issue-47380.stderr
Outdated
| | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings | ||
| help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | ||
| | | ||
| 13 | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!"; |
There was a problem hiding this comment.
Note for reviewers: this looks misaligned on the browser, but not in terminals that handle emojis correctly.
src/test/ui/issue-47377.rs
Outdated
| // except according to those terms. | ||
| fn main(){ | ||
| let b = "hello"; | ||
| let _a = b + ", World!"; |
There was a problem hiding this comment.
This is still using spaces instead of tabs.
src/test/ui/issue-47380.rs
Outdated
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | ||
| // option. This file may not be copied, modified, or distributed | ||
| // except according to those terms. | ||
| // ignore-tidy-tab |
There was a problem hiding this comment.
This is not the file that should get this line, the other one should get it with the tabs. Here we are testing for emojis.
|
@bors r+ rollup |
|
📌 Commit efe3d69 has been approved by |
fix mispositioned span This fixes rust-lang#47377 The output now looks like this ``` error[E0369]: binary operation `+` cannot be applied to type `&str` --> h.rs:3:11 | 3 | let _a = b + ", World!"; | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | 3 | let _a = b.to_owned() + ", World!"; | ^^^^^^^^^ error: aborting due to previous error ``` For the case when emojis are involved, it gives the new output for proper indentation. But for an indentation as follows, ``` fn main() { let b = "hello"; let _a = b + ", World!"; } ``` it still mispositions the span ``` 3 | println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!"; | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings | 3 | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!"; | ^^^^^^^ error: aborting due to previous erro ``` cc @estebank @est31
fix mispositioned span This fixes rust-lang#47377 The output now looks like this ``` error[E0369]: binary operation `+` cannot be applied to type `&str` --> h.rs:3:11 | 3 | let _a = b + ", World!"; | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings help: `to_owned()` can be used to create an owned `String` from a string reference. String concatenation appends the string on the right to the string on the left and may require reallocation. This requires ownership of the string on the left | 3 | let _a = b.to_owned() + ", World!"; | ^^^^^^^^^ error: aborting due to previous error ``` For the case when emojis are involved, it gives the new output for proper indentation. But for an indentation as follows, ``` fn main() { let b = "hello"; let _a = b + ", World!"; } ``` it still mispositions the span ``` 3 | println!("🦀🦀🦀🦀🦀"); let _a = b + ", World!"; | ^^^^^^^^^^^^^^ `+` can't be used to concatenate two `&str` strings | 3 | println!("🦀🦀🦀🦀🦀"); let _a = b.to_owned() + ", World!"; | ^^^^^^^ error: aborting due to previous erro ``` cc @estebank @est31
This fixes #47377 and #47380.
The output now looks like this
For the case when emojis are involved, it gives the new output for proper indentation.
But for an indentation as follows,
it still mispositions the span
cc @estebank @est31