Auto merge of #111552 - matthiaskrgr:rollup-4nidoti, r=matthiaskrgr

Rollup of 4 pull requests

Successful merges:

 - #111463 (Better diagnostics for `env!` where variable contains escape)
 - #111477 (better diagnostics for `impl<..> impl Trait for Type`)
 - #111534 (rustdoc-json: Add tests for `#![feature(inherent_associated_types)]`)
 - #111549 ([rustdoc] Convert more GUI tests colors to their original format)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2023-05-14 08:06:40 +00:00
commit 0a0e045e50
15 changed files with 296 additions and 100 deletions

View File

@ -63,7 +63,8 @@ pub fn expand_env<'cx>(
Some(exprs) => exprs.into_iter(), Some(exprs) => exprs.into_iter(),
}; };
let Some((var, _style)) = expr_to_string(cx, exprs.next().unwrap(), "expected string literal") else { let var_expr = exprs.next().unwrap();
let Some((var, _)) = expr_to_string(cx, var_expr.clone(), "expected string literal") else {
return DummyResult::any(sp); return DummyResult::any(sp);
}; };
@ -71,7 +72,7 @@ pub fn expand_env<'cx>(
None => None, None => None,
Some(second) => match expr_to_string(cx, second, "expected string literal") { Some(second) => match expr_to_string(cx, second, "expected string literal") {
None => return DummyResult::any(sp), None => return DummyResult::any(sp),
Some((s, _style)) => Some(s), Some((s, _)) => Some(s),
}, },
}; };
@ -80,10 +81,15 @@ pub fn expand_env<'cx>(
cx.sess.parse_sess.env_depinfo.borrow_mut().insert((var, value)); cx.sess.parse_sess.env_depinfo.borrow_mut().insert((var, value));
let e = match value { let e = match value {
None => { None => {
// Use the string literal in the code in the diagnostic to avoid confusing diagnostics,
// e.g. when the literal contains escape sequences.
let ast::ExprKind::Lit(ast::token::Lit { kind: ast::token::LitKind::Str, symbol: original_var, ..}) = &var_expr.kind else {
unreachable!("`expr_to_string` ensures this is a string lit")
};
cx.emit_err(errors::EnvNotDefined { cx.emit_err(errors::EnvNotDefined {
span: sp, span: sp,
msg: custom_msg, msg: custom_msg,
var, var: *original_var,
help: custom_msg.is_none().then(|| help_for_missing_env_var(var.as_str())), help: custom_msg.is_none().then(|| help_for_missing_env_var(var.as_str())),
}); });
return DummyResult::any(sp); return DummyResult::any(sp);

View File

@ -478,6 +478,11 @@ parse_missing_for_in_trait_impl = missing `for` in a trait impl
parse_expected_trait_in_trait_impl_found_type = expected a trait, found type parse_expected_trait_in_trait_impl_found_type = expected a trait, found type
parse_extra_impl_keyword_in_trait_impl = unexpected `impl` keyword
.suggestion = remove the extra `impl`
.note = this is parsed as an `impl Trait` type, but a trait is expected at this position
parse_non_item_in_item_list = non-item in item list parse_non_item_in_item_list = non-item in item list
.suggestion_use_const_not_let = consider using `const` instead of `let` for associated const .suggestion_use_const_not_let = consider using `const` instead of `let` for associated const
.label_list_start = item list starts here .label_list_start = item list starts here

View File

@ -1519,6 +1519,16 @@ pub(crate) struct ExpectedTraitInTraitImplFoundType {
pub span: Span, pub span: Span,
} }
#[derive(Diagnostic)]
#[diag(parse_extra_impl_keyword_in_trait_impl)]
pub(crate) struct ExtraImplKeywordInTraitImpl {
#[primary_span]
#[suggestion(code = "", applicability = "maybe-incorrect")]
pub extra_impl_kw: Span,
#[note]
pub impl_trait_span: Span,
}
#[derive(Diagnostic)] #[derive(Diagnostic)]
#[diag(parse_bounds_not_allowed_on_trait_aliases)] #[diag(parse_bounds_not_allowed_on_trait_aliases)]
pub(crate) struct BoundsNotAllowedOnTraitAliases { pub(crate) struct BoundsNotAllowedOnTraitAliases {

View File

@ -603,10 +603,24 @@ impl<'a> Parser<'a> {
let path = match ty_first.kind { let path = match ty_first.kind {
// This notably includes paths passed through `ty` macro fragments (#46438). // This notably includes paths passed through `ty` macro fragments (#46438).
TyKind::Path(None, path) => path, TyKind::Path(None, path) => path,
_ => { other => {
self.sess.emit_err(errors::ExpectedTraitInTraitImplFoundType { if let TyKind::ImplTrait(_, bounds) = other
span: ty_first.span, && let [bound] = bounds.as_slice()
}); {
// Suggest removing extra `impl` keyword:
// `impl<T: Default> impl Default for Wrapper<T>`
// ^^^^^
let extra_impl_kw = ty_first.span.until(bound.span());
self.sess
.emit_err(errors::ExtraImplKeywordInTraitImpl {
extra_impl_kw,
impl_trait_span: ty_first.span
});
} else {
self.sess.emit_err(errors::ExpectedTraitInTraitImplFoundType {
span: ty_first.span,
});
}
err_path(ty_first.span) err_path(ty_first.span)
} }
}; };

View File

@ -47,89 +47,89 @@ reload:
wait-for: "#search-tabs" wait-for: "#search-tabs"
assert-css: ( assert-css: (
"#search-tabs > button > .count", "#search-tabs > button > .count",
{"color": "rgb(136, 136, 136)"}, {"color": "#888"},
ALL, ALL,
) )
assert-css: ( assert-css: (
"//*[@class='desc'][text()='Just a normal struct.']", "//*[@class='desc'][text()='Just a normal struct.']",
{"color": "rgb(197, 197, 197)"}, {"color": "#c5c5c5"},
) )
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']", "//*[@class='result-name']/*[text()='test_docs::']",
{"color": "rgb(0, 150, 207)"}, {"color": "#0096cf"},
) )
// Checking the color of the bottom border. // Checking the color of the bottom border.
assert-css: ( assert-css: (
".search-results > a", ".search-results > a",
{"border-bottom-color": "rgba(170, 170, 170, 0.2)"} {"border-bottom-color": "#aaa3"}
) )
// Checking the color of "keyword" text. // Checking the color of "keyword" text.
assert-css: ( assert-css: (
"//*[@class='result-name']//*[text()='(keyword)']", "//*[@class='result-name']//*[text()='(keyword)']",
{"color": "rgb(120, 135, 151)"}, {"color": "#788797"},
) )
store-value: (entry_color, "rgb(0, 150, 207)") // color of the search entry store-value: (entry_color, "#0096cf") // color of the search entry
store-value: (hover_entry_color, "rgb(255, 255, 255)") // color of the hovered/focused search entry store-value: (hover_entry_color, "#fff") // color of the hovered/focused search entry
store-value: (background_color, "rgba(0, 0, 0, 0)") // background color store-value: (background_color, "transparent") // background color
store-value: (hover_background_color, "rgb(60, 60, 60)") // hover background color store-value: (hover_background_color, "#3c3c3c") // hover background color
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"keyword", // item kind "keyword", // item kind
"rgb(57, 175, 215)", // color of item kind "#39afd7", // color of item kind
"rgb(57, 175, 215)", // color of hovered/focused item kind "#39afd7", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"struct", // item kind "struct", // item kind
"rgb(255, 160, 165)", // color of item kind "#ffa0a5", // color of item kind
"rgb(255, 160, 165)", // color of hovered/focused item kind "#ffa0a5", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"associatedtype", // item kind "associatedtype", // item kind
"rgb(57, 175, 215)", // color of item kind "#39afd7", // color of item kind
"rgb(57, 175, 215)", // color of hovered/focused item kind "#39afd7", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"tymethod", // item kind "tymethod", // item kind
"rgb(253, 214, 135)", // color of item kind "#fdd687", // color of item kind
"rgb(253, 214, 135)", // color of hovered/focused item kind "#fdd687", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"method", // item kind "method", // item kind
"rgb(253, 214, 135)", // color of item kind "#fdd687", // color of item kind
"rgb(253, 214, 135)", // color of hovered/focused item kind "#fdd687", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"structfield", // item kind "structfield", // item kind
"rgb(0, 150, 207)", // color of item kind "#0096cf", // color of item kind
"rgb(255, 255, 255)", // color of hovered/focused item kind "#fff", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"macro", // item kind "macro", // item kind
"rgb(163, 122, 204)", // color of item kind "#a37acc", // color of item kind
"rgb(163, 122, 204)", // color of hovered/focused item kind "#a37acc", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"fn", // item kind "fn", // item kind
"rgb(253, 214, 135)", // color of item kind "#fdd687", // color of item kind
"rgb(253, 214, 135)", // color of hovered/focused item kind "#fdd687", // color of hovered/focused item kind
), ),
) )
@ -138,7 +138,7 @@ move-cursor-to: ".search-input"
focus: ".search-input" // To ensure the `<a>` container isnt focus or hover. focus: ".search-input" // To ensure the `<a>` container isnt focus or hover.
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']/ancestor::a", "//*[@class='result-name']/*[text()='test_docs::']/ancestor::a",
{"color": "rgb(0, 150, 207)", "background-color": "rgba(0, 0, 0, 0)"}, {"color": "#0096cf", "background-color": "transparent"},
ALL, ALL,
) )
@ -146,11 +146,11 @@ assert-css: (
move-cursor-to: "//*[@class='desc'][text()='Just a normal struct.']" move-cursor-to: "//*[@class='desc'][text()='Just a normal struct.']"
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']", "//*[@class='result-name']/*[text()='test_docs::']",
{"color": "rgb(255, 255, 255)"}, {"color": "#fff"},
) )
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']/ancestor::a", "//*[@class='result-name']/*[text()='test_docs::']/ancestor::a",
{"color": "rgb(255, 255, 255)", "background-color": "rgb(60, 60, 60)"}, {"color": "#fff", "background-color": "rgb(60, 60, 60)"},
) )
// Dark theme // Dark theme
@ -164,89 +164,89 @@ reload:
wait-for: "#search-tabs" wait-for: "#search-tabs"
assert-css: ( assert-css: (
"#search-tabs > button > .count", "#search-tabs > button > .count",
{"color": "rgb(136, 136, 136)"}, {"color": "#888"},
ALL, ALL,
) )
assert-css: ( assert-css: (
"//*[@class='desc'][text()='Just a normal struct.']", "//*[@class='desc'][text()='Just a normal struct.']",
{"color": "rgb(221, 221, 221)"}, {"color": "#ddd"},
) )
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']", "//*[@class='result-name']/*[text()='test_docs::']",
{"color": "rgb(221, 221, 221)"}, {"color": "#ddd"},
) )
// Checking the color of the bottom border. // Checking the color of the bottom border.
assert-css: ( assert-css: (
".search-results > a", ".search-results > a",
{"border-bottom-color": "rgba(170, 170, 170, 0.2)"} {"border-bottom-color": "#aaa3"}
) )
// Checking the color for "keyword" text. // Checking the color for "keyword" text.
assert-css: ( assert-css: (
"//*[@class='result-name']//*[text()='(keyword)']", "//*[@class='result-name']//*[text()='(keyword)']",
{"color": "rgb(221, 221, 221)"}, {"color": "#ddd"},
) )
store-value: (entry_color, "rgb(221, 221, 221)") // color of the search entry store-value: (entry_color, "#ddd") // color of the search entry
store-value: (hover_entry_color, "rgb(221, 221, 221)") // color of the hovered/focused search entry store-value: (hover_entry_color, "#ddd") // color of the hovered/focused search entry
store-value: (background_color, "rgba(0, 0, 0, 0)") // background color store-value: (background_color, "transparent") // background color
store-value: (hover_background_color, "rgb(97, 97, 97)") // hover background color store-value: (hover_background_color, "#616161") // hover background color
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"keyword", // item kind "keyword", // item kind
"rgb(210, 153, 29)", // color of item kind "#d2991d", // color of item kind
"rgb(210, 153, 29)", // color of hovered/focused item kind "#d2991d", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"struct", // item kind "struct", // item kind
"rgb(45, 191, 184)", // color of item kind "#2dbfb8", // color of item kind
"rgb(45, 191, 184)", // color of hovered/focused item kind "#2dbfb8", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"associatedtype", // item kind "associatedtype", // item kind
"rgb(210, 153, 29)", // color of item kind "#d2991d", // color of item kind
"rgb(210, 153, 29)", // color of hovered/focused item kind "#d2991d", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"tymethod", // item kind "tymethod", // item kind
"rgb(43, 171, 99)", // color of item kind "#2bab63", // color of item kind
"rgb(43, 171, 99)", // color of hovered/focused item kind "#2bab63", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"method", // item kind "method", // item kind
"rgb(43, 171, 99)", // color of item kind "#2bab63", // color of item kind
"rgb(43, 171, 99)", // color of hovered/focused item kind "#2bab63", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"structfield", // item kind "structfield", // item kind
"rgb(221, 221, 221)", // color of item kind "#ddd", // color of item kind
"rgb(221, 221, 221)", // color of hovered/focused item kind "#ddd", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"macro", // item kind "macro", // item kind
"rgb(9, 189, 0)", // color of item kind "#09bd00", // color of item kind
"rgb(9, 189, 0)", // color of hovered/focused item kind "#09bd00", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"fn", // item kind "fn", // item kind
"rgb(43, 171, 99)", // color of item kind "#2bab63", // color of item kind
"rgb(43, 171, 99)", // color of hovered/focused item kind "#2bab63", // color of hovered/focused item kind
), ),
) )
@ -255,7 +255,7 @@ move-cursor-to: ".search-input"
focus: ".search-input" // To ensure the `<a>` container isnt focus or hover. focus: ".search-input" // To ensure the `<a>` container isnt focus or hover.
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']/ancestor::a", "//*[@class='result-name']/*[text()='test_docs::']/ancestor::a",
{"color": "rgb(221, 221, 221)", "background-color": "rgba(0, 0, 0, 0)"}, {"color": "#ddd", "background-color": "transparent"},
) )
// Light theme // Light theme
@ -266,89 +266,89 @@ reload:
wait-for: "#search-tabs" wait-for: "#search-tabs"
assert-css: ( assert-css: (
"#search-tabs > button > .count", "#search-tabs > button > .count",
{"color": "rgb(136, 136, 136)"}, {"color": "#888"},
ALL, ALL,
) )
assert-css: ( assert-css: (
"//*[@class='desc'][text()='Just a normal struct.']", "//*[@class='desc'][text()='Just a normal struct.']",
{"color": "rgb(0, 0, 0)"}, {"color": "#000"},
) )
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']", "//*[@class='result-name']/*[text()='test_docs::']",
{"color": "rgb(0, 0, 0)"}, {"color": "#000"},
) )
// Checking the color of the bottom border. // Checking the color of the bottom border.
assert-css: ( assert-css: (
".search-results > a", ".search-results > a",
{"border-bottom-color": "rgba(170, 170, 170, 0.2)"} {"border-bottom-color": "#aaa3"}
) )
// Checking the color for "keyword" text. // Checking the color for "keyword" text.
assert-css: ( assert-css: (
"//*[@class='result-name']//*[text()='(keyword)']", "//*[@class='result-name']//*[text()='(keyword)']",
{"color": "rgb(0, 0, 0)"}, {"color": "#000"},
) )
store-value: (entry_color, "rgb(0, 0, 0)") // color of the search entry store-value: (entry_color, "#000") // color of the search entry
store-value: (hover_entry_color, "rgb(0, 0, 0)") // color of the hovered/focused search entry store-value: (hover_entry_color, "#000") // color of the hovered/focused search entry
store-value: (background_color, "rgba(0, 0, 0, 0)") // background color store-value: (background_color, "transparent") // background color
store-value: (hover_background_color, "rgb(204, 204, 204)") // hover background color store-value: (hover_background_color, "#ccc") // hover background color
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"keyword", // item kind "keyword", // item kind
"rgb(56, 115, 173)", // color of item kind "#3873ad", // color of item kind
"rgb(56, 115, 173)", // color of hovered/focused item kind "#3873ad", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"struct", // item kind "struct", // item kind
"rgb(173, 55, 138)", // color of item kind "#ad378a", // color of item kind
"rgb(173, 55, 138)", // color of hovered/focused item kind "#ad378a", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"associatedtype", // item kind "associatedtype", // item kind
"rgb(56, 115, 173)", // color of item kind "#3873ad", // color of item kind
"rgb(56, 115, 173)", // color of hovered/focused item kind "#3873ad", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"tymethod", // item kind "tymethod", // item kind
"rgb(173, 124, 55)", // color of item kind "#ad7c37", // color of item kind
"rgb(173, 124, 55)", // color of hovered/focused item kind "#ad7c37", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"method", // item kind "method", // item kind
"rgb(173, 124, 55)", // color of item kind "#ad7c37", // color of item kind
"rgb(173, 124, 55)", // color of hovered/focused item kind "#ad7c37", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"structfield", // item kind "structfield", // item kind
"rgb(0, 0, 0)", // color of item kind "#000", // color of item kind
"rgb(0, 0, 0)", // color of hovered/focused item kind "#000", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"macro", // item kind "macro", // item kind
"rgb(6, 128, 0)", // color of item kind "#068000", // color of item kind
"rgb(6, 128, 0)", // color of hovered/focused item kind "#068000", // color of hovered/focused item kind
), ),
) )
call-function: ( call-function: (
"check-result-color", ( "check-result-color", (
"fn", // item kind "fn", // item kind
"rgb(173, 124, 55)", // color of item kind "#ad7c37", // color of item kind
"rgb(173, 124, 55)", // color of hovered/focused item kind "#ad7c37", // color of hovered/focused item kind
), ),
) )
@ -357,7 +357,7 @@ move-cursor-to: ".search-input"
focus: ".search-input" // To ensure the `<a>` container isnt focus or hover. focus: ".search-input" // To ensure the `<a>` container isnt focus or hover.
assert-css: ( assert-css: (
"//*[@class='result-name']/*[text()='test_docs::']/ancestor::a", "//*[@class='result-name']/*[text()='test_docs::']/ancestor::a",
{"color": "rgb(0, 0, 0)", "background-color": "rgba(0, 0, 0, 0)"}, {"color": "#000", "background-color": "transparent"},
) )
// Check the alias. // Check the alias.
@ -386,16 +386,16 @@ define-function: (
call-function: ("check-alias", { call-function: ("check-alias", {
"theme": "ayu", "theme": "ayu",
"alias": "rgb(197, 197, 197)", "alias": "#c5c5c5",
"grey": "rgb(153, 153, 153)", "grey": "#999",
}) })
call-function: ("check-alias", { call-function: ("check-alias", {
"theme": "dark", "theme": "dark",
"alias": "rgb(255, 255, 255)", "alias": "#fff",
"grey": "rgb(204, 204, 204)", "grey": "#ccc",
}) })
call-function: ("check-alias", { call-function: ("check-alias", {
"theme": "light", "theme": "light",
"alias": "rgb(0, 0, 0)", "alias": "#000",
"grey": "rgb(153, 153, 153)", "grey": "#999",
}) })

View File

@ -0,0 +1,29 @@
// ignore-tidy-linelength
#![feature(inherent_associated_types)]
#![feature(no_core)]
#![allow(incomplete_features)]
#![no_core]
// @set OwnerMetadata = '$.index[*][?(@.name=="OwnerMetadata")].id'
pub struct OwnerMetadata;
// @set Owner = '$.index[*][?(@.name=="Owner")].id'
pub struct Owner;
pub fn create() -> Owner::Metadata {
OwnerMetadata
}
// @is '$.index[*][?(@.name=="create")].inner.decl.output.kind' '"qualified_path"'
// @is '$.index[*][?(@.name=="create")].inner.decl.output.inner.name' '"Metadata"'
// @is '$.index[*][?(@.name=="create")].inner.decl.output.inner.trait' null
// @is '$.index[*][?(@.name=="create")].inner.decl.output.inner.self_type.kind' '"resolved_path"'
// @is '$.index[*][?(@.name=="create")].inner.decl.output.inner.self_type.inner.id' $Owner
/// impl
impl Owner {
/// iat
pub type Metadata = OwnerMetadata;
}
// @set iat = '$.index[*][?(@.docs=="iat")].id'
// @is '$.index[*][?(@.docs=="impl")].inner.items[*]' $iat
// @is '$.index[*][?(@.docs=="iat")].kind' '"assoc_type"'
// @is '$.index[*][?(@.docs=="iat")].inner.default.inner.id' $OwnerMetadata

View File

@ -0,0 +1,21 @@
// ignore-tidy-linelength
#![feature(inherent_associated_types)]
#![allow(incomplete_features)]
// @set Carrier = '$.index[*][?(@.name=="Carrier")].id'
pub struct Carrier<'a>(&'a ());
// @is '$.index[*][?(@.name=="User")].inner.type.kind' '"function_pointer"'
// @is '$.index[*][?(@.name=="User")].inner.type.inner.generic_params[*].name' \""'b"\"
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].kind' '"qualified_path"'
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].inner.self_type.inner.id' $Carrier
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].inner.self_type.inner.args.angle_bracketed.args[0].lifetime' \""'b"\"
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].inner.name' '"Focus"'
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].inner.trait' null
// @is '$.index[*][?(@.name=="User")].inner.type.inner.decl.inputs[0][1].inner.args.angle_bracketed.args[0].type.inner' '"i32"'
pub type User = for<'b> fn(Carrier<'b>::Focus<i32>);
impl<'a> Carrier<'a> {
pub type Focus<T> = &'a mut T;
}

View File

@ -0,0 +1,33 @@
// ignore-tidy-linelength
#![feature(inherent_associated_types)]
#![allow(incomplete_features)]
// @set Parametrized = '$.index[*][?(@.name=="Parametrized")].id'
pub struct Parametrized<T>(T);
// @is '$.index[*][?(@.name=="Test")].inner.type.kind' '"qualified_path"'
// @is '$.index[*][?(@.name=="Test")].inner.type.inner.self_type.inner.id' $Parametrized
// @is '$.index[*][?(@.name=="Test")].inner.type.inner.self_type.inner.args.angle_bracketed.args[0].type' '{"inner": "i32", "kind": "primitive"}'
// @is '$.index[*][?(@.name=="Test")].inner.type.inner.name' '"Proj"'
// @is '$.index[*][?(@.name=="Test")].inner.type.inner.trait' null
pub type Test = Parametrized<i32>::Proj;
/// param_bool
impl Parametrized<bool> {
/// param_bool_proj
pub type Proj = ();
}
/// param_i32
impl Parametrized<i32> {
/// param_i32_proj
pub type Proj = String;
}
// @set param_bool = '$.index[*][?(@.docs=="param_bool")].id'
// @set param_i32 = '$.index[*][?(@.docs=="param_i32")].id'
// @set param_bool_proj = '$.index[*][?(@.docs=="param_bool_proj")].id'
// @set param_i32_proj = '$.index[*][?(@.docs=="param_i32_proj")].id'
// @is '$.index[*][?(@.docs=="param_bool")].inner.items[*]' $param_bool_proj
// @is '$.index[*][?(@.docs=="param_i32")].inner.items[*]' $param_i32_proj

View File

@ -0,0 +1,3 @@
fn main() {
env!("\t"); //~ERROR environment variable `\t` not defined at compile time
}

View File

@ -0,0 +1,11 @@
error: environment variable `\t` not defined at compile time
--> $DIR/extenv-escaped-var.rs:2:5
|
LL | env!("\t");
| ^^^^^^^^^^
|
= help: use `std::env::var("\t")` to read the variable at run time
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error

View File

@ -1,28 +1,28 @@
error: environment variable ` ` not defined at compile time error: environment variable `\t` not defined at compile time
--> $DIR/issue-110547.rs:4:5 --> $DIR/issue-110547.rs:4:5
| |
LL | env!{"\t"}; LL | env!{"\t"};
| ^^^^^^^^^^ | ^^^^^^^^^^
| |
= help: use `std::env::var(" ")` to read the variable at run time = help: use `std::env::var("\t")` to read the variable at run time
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
error: environment variable ` ` not defined at compile time error: environment variable `\t` not defined at compile time
--> $DIR/issue-110547.rs:5:5 --> $DIR/issue-110547.rs:5:5
| |
LL | env!("\t"); LL | env!("\t");
| ^^^^^^^^^^ | ^^^^^^^^^^
| |
= help: use `std::env::var(" ")` to read the variable at run time = help: use `std::env::var("\t")` to read the variable at run time
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
error: environment variable `` not defined at compile time error: environment variable `\u{2069}` not defined at compile time
--> $DIR/issue-110547.rs:6:5 --> $DIR/issue-110547.rs:6:5
| |
LL | env!("\u{2069}"); LL | env!("\u{2069}");
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
| |
= help: use `std::env::var("")` to read the variable at run time = help: use `std::env::var("\u{2069}")` to read the variable at run time
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info) = note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 3 previous errors error: aborting due to 3 previous errors

View File

@ -0,0 +1,19 @@
// run-rustfix
struct S<T>(T);
struct S2;
impl<T: Default> Default for S<T> {
//~^ ERROR: unexpected `impl` keyword
//~| HELP: remove the extra `impl`
fn default() -> Self { todo!() }
}
impl Default for S2 {
//~^ ERROR: unexpected `impl` keyword
//~| HELP: remove the extra `impl`
fn default() -> Self { todo!() }
}
fn main() {}

View File

@ -0,0 +1,19 @@
// run-rustfix
struct S<T>(T);
struct S2;
impl<T: Default> impl Default for S<T> {
//~^ ERROR: unexpected `impl` keyword
//~| HELP: remove the extra `impl`
fn default() -> Self { todo!() }
}
impl impl Default for S2 {
//~^ ERROR: unexpected `impl` keyword
//~| HELP: remove the extra `impl`
fn default() -> Self { todo!() }
}
fn main() {}

View File

@ -0,0 +1,26 @@
error: unexpected `impl` keyword
--> $DIR/extra-impl-in-trait-impl.rs:6:18
|
LL | impl<T: Default> impl Default for S<T> {
| ^^^^^ help: remove the extra `impl`
|
note: this is parsed as an `impl Trait` type, but a trait is expected at this position
--> $DIR/extra-impl-in-trait-impl.rs:6:18
|
LL | impl<T: Default> impl Default for S<T> {
| ^^^^^^^^^^^^
error: unexpected `impl` keyword
--> $DIR/extra-impl-in-trait-impl.rs:12:6
|
LL | impl impl Default for S2 {
| ^^^^^ help: remove the extra `impl`
|
note: this is parsed as an `impl Trait` type, but a trait is expected at this position
--> $DIR/extra-impl-in-trait-impl.rs:12:6
|
LL | impl impl Default for S2 {
| ^^^^^^^^^^^^
error: aborting due to 2 previous errors