8000 Merge pull request #219 from Muscraft/atleast-one-line · rust-lang/annotate-snippets-rs@b228756 · GitHub
[go: up one dir, main page]

Skip to content {"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}

Commit b228756

Browse files
authored
Merge pull request #219 from Muscraft/atleast-one-line
fix: Ensure empty sources have one "line"
2 parents 24573e2 + 2324214 commit b228756

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed

src/renderer/source_map.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@ pub(crate) struct SourceMap<'a> {
1111

1212
impl<'a> SourceMap<'a> {
1313
pub(crate) fn new(source: &'a str, line_start: usize) -> Self {
14+
// Empty sources do have a "line", but it is empty, so we need to add
15+
// a line with an empty string to the source map.
16+
if source.is_empty() {
17+
return Self {
18+
lines: vec![LineInfo {
19+
line: "",
20+
line_index: line_start,
21+
start_byte: 0,
22+
end_byte: 0,
23+
end_line_size: 0,
24+
}],
25+
source,
26+
};
27+
}
28+
1429
let mut current_index = 0;
1530

1631
let mut mapping = vec![];

tests/formatter.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ fn test_only_source() {
303303
error:
304304
--> file.rs
305305
|
306+
1 |
306307
"#]];
307308
let renderer = Renderer::plain();
308309
assert_data_eq!(renderer.render(input), expected);

tests/rustc_tests.rs

Lines changed: 113 additions & 0 deletions
< 57AE td data-grid-cell-id="diff-3808400e9736befc20dc1f423be43b430e6d06881502fd3a60d642985e6495c1-2682-2736-0" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">
Original file line numberDiff line numberDiff line change
@@ -2680,3 +2680,116 @@ LL | | */
26802680
let renderer = Renderer::plain().anonymized_line_numbers(true);
26812681
assert_data_eq!(renderer.render(input), expected);
26822682
}
2683+
2684+
#[test]
2685+
fn mismatched_types1() {
2686+
// tests/ui/include-macros/mismatched-types.rs
2687+
2688+
let file_txt_source = r#""#;
2689+
2690+
let rust_source = r#"fn main() {
2691+
let b: &[u8] = include_str!("file.txt"); //~ ERROR mismatched types
2692+
let s: &str = include_bytes!("file.txt"); 10000 //~ ERROR mismatched types
2693+
}"#;
2694+
2695+
let input = Level::ERROR.header("mismatched types").id("E0308").group(
2696+
Group::new()
2697+
.element(
2698+
Snippet::source(file_txt_source)
2699+
.fold(true)
2700+
.line_start(3)
2701+
.origin("$DIR/file.txt")
2702+
.annotation(
2703+
AnnotationKind::Primary
2704+
.span(0..0)
2705+
.label("expected `&[u8]`, found `&str`"),
2706+
),
2707+
)
2708+
.element(
2709+
Snippet::source(rust_source)
2710+
.origin("$DIR/mismatched-types.rs")
2711+
.fold(true)
2712+
.annotation(
2713+
AnnotationKind::Context
2714+
.span(23..28)
2715+
.label("expected due to this"),
2716+
)
2717+
.annotation(
2718+
AnnotationKind::Context
2719+
.span(31..55)
2720+
.label("in this macro invocation"),
2721+
),
2722+
)
2723+
.element(
2724+
Level::NOTE.title("expected reference `&[u8]`\n found reference `&'static str`"),
2725+
),
2726+
);
2727+
2728+
let expected = str![[r#"
2729+
error[E0308]: mismatched types
2730+
--> $DIR/file.txt:3:1
2731+
|
2732+
LL |
2733+
| ^ expected `&[u8]`, found `&str`
2734+
|
2735+
::: $DIR/mismatched-types.rs:2:12
2736+
|
2737+
LL | let b: &[u8] = include_str!("file.txt"); //~ ERROR mismatched types
2738+
| ----- ------------------------ in this macro invocation
2739+
| |
2740+
| expected due to this
2741+
|
2742+
= note: expected reference `&[u8]`
2743+
found reference `&'static str`
2744+
"#]];
2745+
let renderer = Renderer::plain().anonymized_line_numbers(true);
2746+
assert_data_eq!(renderer.render(input), expected);
2747+
}
2748+
2749+
#[test]
2750+
fn mismatched_types2() {
B41A
2751+
// tests/ui/include-macros/mismatched-types.rs
2752+
2753+
let source = r#"fn main() {
2754+
let b: &[u8] = include_str!("file.txt"); //~ ERROR mismatched types
2755+
let s: &str = include_bytes!("file.txt"); //~ ERROR mismatched types
2756+
}"#;
2757+
2758+
let input = Level::ERROR.header("mismatched types").id("E0308").group(
2759+
Group::new()
2760+
.element(
2761+
Snippet::source(source)
2762+
.origin("$DIR/mismatched-types.rs")
2763+
.fold(true)
2764+
.annotation(
2765+
AnnotationKind::Primary
2766+
.span(105..131)
2767+
.label("expected `&str`, found `&[u8; 0]`"),
2768+
)
2769+
.annotation(
2770+
AnnotationKind::Context
2771+
.span(98..102)
2772+
.label("expected due to this"),
2773+
),
2774+
)
2775+
.element(
2776+
Level::NOTE
2777+
.title("expected reference `&str`\n found reference `&'static [u8; 0]`"),
2778+
),
2779+
);
2780+
2781+
let expected = str![[r#"
2782+
error[E0308]: mismatched types
2783+
--> $DIR/mismatched-types.rs:3:19
2784+
|
2785+
LL | let s: &str = include_bytes!("file.txt"); //~ ERROR mismatched types
2786+
| ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `&str`, found `&[u8; 0]`
2787+
| |
2788+
| expected due to this
2789+
|
2790+
= note: expected reference `&str`
2791+
found reference `&'static [u8; 0]`
2792+
"#]];
2793+
let renderer = Renderer::plain().anonymized_line_numbers(true);
2794+
assert_data_eq!(renderer.render(input), expected);
2795+
}

0 commit comments

Comments
 (0)
0