mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Rollup merge of #129477 - Xiretza:fix-fluent-diagnostics, r=compiler-errors
Fix fluent diagnostics This line number calculation was both wrong and unnecessary.
This commit is contained in:
commit
8b36ecba97
@ -138,25 +138,8 @@ pub(crate) fn fluent_messages(input: proc_macro::TokenStream) -> proc_macro::Tok
|
||||
// with a lowercase as rustc errors do.
|
||||
err.replace_range(0..1, &err.chars().next().unwrap().to_lowercase().to_string());
|
||||
|
||||
let line_starts: Vec<usize> = std::iter::once(0)
|
||||
.chain(
|
||||
this.source()
|
||||
.char_indices()
|
||||
.filter_map(|(i, c)| Some(i + 1).filter(|_| c == '\n')),
|
||||
)
|
||||
.collect();
|
||||
let line_start = line_starts
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(line, idx)| (line + 1, idx))
|
||||
.filter(|(_, idx)| **idx <= pos.start)
|
||||
.last()
|
||||
.unwrap()
|
||||
.0;
|
||||
|
||||
let message = annotate_snippets::Level::Error.title(&err).snippet(
|
||||
Snippet::source(this.source())
|
||||
.line_start(line_start)
|
||||
.origin(&relative_ftl_path)
|
||||
.fold(true)
|
||||
.annotation(annotate_snippets::Level::Error.span(pos.start..pos.end - 1)),
|
||||
|
11
tests/ui-fulldeps/fluent-messages/many-lines.ftl
Normal file
11
tests/ui-fulldeps/fluent-messages/many-lines.ftl
Normal file
@ -0,0 +1,11 @@
|
||||
no_crate_foo = foo
|
||||
|
||||
# This file tests error reporting for
|
||||
# fluent files with many lines.
|
||||
# The error message should point to the correct line number
|
||||
# and include no more context than necessary.
|
||||
|
||||
no_crate_bar =
|
||||
|
||||
no_crate_baz =
|
||||
baz
|
@ -80,3 +80,8 @@ mod bad_escape {
|
||||
//~| ERROR invalid escape `\"`
|
||||
//~| ERROR invalid escape `\'`
|
||||
}
|
||||
|
||||
mod many_lines {
|
||||
rustc_fluent_macro::fluent_messages! { "./many-lines.ftl" }
|
||||
//~^ ERROR could not parse Fluent resource
|
||||
}
|
||||
|
@ -103,5 +103,20 @@ LL | rustc_fluent_macro::fluent_messages! { "./invalid-escape.ftl" }
|
||||
|
|
||||
= note: Fluent does not interpret these escape sequences (<https://projectfluent.org/fluent/guide/special.html>)
|
||||
|
||||
error: aborting due to 13 previous errors
|
||||
error: could not parse Fluent resource
|
||||
--> $DIR/test.rs:85:44
|
||||
|
|
||||
LL | rustc_fluent_macro::fluent_messages! { "./many-lines.ftl" }
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: see additional errors emitted
|
||||
|
||||
error: expected a message field for "no_crate_bar"
|
||||
--> ./many-lines.ftl:8:1
|
||||
|
|
||||
8 | no_crate_bar =
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user