Rollup merge of #132956 - maxcabrajac:coroutine_kind, r=petrochenkov
Add visit_coroutine_kind to ast::Visitor r? ``@petrochenkov`` related to #128974
This commit is contained in:
commit
325bc6c201
2 changed files with 17 additions and 22 deletions
|
@ -268,8 +268,8 @@ pub trait Visitor<'ast>: Sized {
|
||||||
fn visit_fn_ret_ty(&mut self, ret_ty: &'ast FnRetTy) -> Self::Result {
|
fn visit_fn_ret_ty(&mut self, ret_ty: &'ast FnRetTy) -> Self::Result {
|
||||||
walk_fn_ret_ty(self, ret_ty)
|
walk_fn_ret_ty(self, ret_ty)
|
||||||
}
|
}
|
||||||
fn visit_fn_header(&mut self, _header: &'ast FnHeader) -> Self::Result {
|
fn visit_fn_header(&mut self, header: &'ast FnHeader) -> Self::Result {
|
||||||
Self::Result::output()
|
walk_fn_header(self, header)
|
||||||
}
|
}
|
||||||
fn visit_expr_field(&mut self, f: &'ast ExprField) -> Self::Result {
|
fn visit_expr_field(&mut self, f: &'ast ExprField) -> Self::Result {
|
||||||
walk_expr_field(self, f)
|
walk_expr_field(self, f)
|
||||||
|
@ -292,6 +292,9 @@ pub trait Visitor<'ast>: Sized {
|
||||||
fn visit_capture_by(&mut self, _capture_by: &'ast CaptureBy) -> Self::Result {
|
fn visit_capture_by(&mut self, _capture_by: &'ast CaptureBy) -> Self::Result {
|
||||||
Self::Result::output()
|
Self::Result::output()
|
||||||
}
|
}
|
||||||
|
fn visit_coroutine_kind(&mut self, _coroutine_kind: &'ast CoroutineKind) -> Self::Result {
|
||||||
|
Self::Result::output()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
|
pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) -> V::Result {
|
||||||
|
@ -813,6 +816,12 @@ pub fn walk_fn_ret_ty<'a, V: Visitor<'a>>(visitor: &mut V, ret_ty: &'a FnRetTy)
|
||||||
V::Result::output()
|
V::Result::output()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn walk_fn_header<'a, V: Visitor<'a>>(visitor: &mut V, fn_header: &'a FnHeader) -> V::Result {
|
||||||
|
let FnHeader { safety: _, coroutine_kind, constness: _, ext: _ } = fn_header;
|
||||||
|
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
|
||||||
|
V::Result::output()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn walk_fn_decl<'a, V: Visitor<'a>>(
|
pub fn walk_fn_decl<'a, V: Visitor<'a>>(
|
||||||
visitor: &mut V,
|
visitor: &mut V,
|
||||||
FnDecl { inputs, output }: &'a FnDecl,
|
FnDecl { inputs, output }: &'a FnDecl,
|
||||||
|
@ -830,8 +839,9 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>) -> V::Resu
|
||||||
try_visit!(walk_fn_decl(visitor, decl));
|
try_visit!(walk_fn_decl(visitor, decl));
|
||||||
visit_opt!(visitor, visit_block, body);
|
visit_opt!(visitor, visit_block, body);
|
||||||
}
|
}
|
||||||
FnKind::Closure(binder, _coroutine_kind, decl, body) => {
|
FnKind::Closure(binder, coroutine_kind, decl, body) => {
|
||||||
try_visit!(visitor.visit_closure_binder(binder));
|
try_visit!(visitor.visit_closure_binder(binder));
|
||||||
|
visit_opt!(visitor, visit_coroutine_kind, coroutine_kind.as_ref());
|
||||||
try_visit!(walk_fn_decl(visitor, decl));
|
try_visit!(walk_fn_decl(visitor, decl));
|
||||||
try_visit!(visitor.visit_expr(body));
|
try_visit!(visitor.visit_expr(body));
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,6 +68,10 @@ impl<'a, T: EarlyLintPass> EarlyContextAndPass<'a, T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> {
|
impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T> {
|
||||||
|
fn visit_coroutine_kind(&mut self, coroutine_kind: &'a ast::CoroutineKind) -> Self::Result {
|
||||||
|
self.check_id(coroutine_kind.closure_id());
|
||||||
|
}
|
||||||
|
|
||||||
fn visit_param(&mut self, param: &'a ast::Param) {
|
fn visit_param(&mut self, param: &'a ast::Param) {
|
||||||
self.with_lint_attrs(param.id, ¶m.attrs, |cx| {
|
self.with_lint_attrs(param.id, ¶m.attrs, |cx| {
|
||||||
lint_callback!(cx, check_param, param);
|
lint_callback!(cx, check_param, param);
|
||||||
|
@ -111,17 +115,6 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||||
self.with_lint_attrs(e.id, &e.attrs, |cx| {
|
self.with_lint_attrs(e.id, &e.attrs, |cx| {
|
||||||
lint_callback!(cx, check_expr, e);
|
lint_callback!(cx, check_expr, e);
|
||||||
ast_visit::walk_expr(cx, e);
|
ast_visit::walk_expr(cx, e);
|
||||||
// Explicitly check for lints associated with 'closure_id', since
|
|
||||||
// it does not have a corresponding AST node
|
|
||||||
match e.kind {
|
|
||||||
ast::ExprKind::Closure(box ast::Closure {
|
|
||||||
coroutine_kind: Some(coroutine_kind),
|
|
||||||
..
|
|
||||||
}) => {
|
|
||||||
cx.check_id(coroutine_kind.closure_id());
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
lint_callback!(cx, check_expr_post, e);
|
lint_callback!(cx, check_expr_post, e);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -156,14 +149,6 @@ impl<'a, T: EarlyLintPass> ast_visit::Visitor<'a> for EarlyContextAndPass<'a, T>
|
||||||
lint_callback!(self, check_fn, fk, span, id);
|
lint_callback!(self, check_fn, fk, span, id);
|
||||||
self.check_id(id);
|
self.check_id(id);
|
||||||
ast_visit::walk_fn(self, fk);
|
ast_visit::walk_fn(self, fk);
|
||||||
|
|
||||||
// Explicitly check for lints associated with 'closure_id', since
|
|
||||||
// it does not have a corresponding AST node
|
|
||||||
if let ast_visit::FnKind::Fn(_, _, sig, _, _, _) = fk {
|
|
||||||
if let Some(coroutine_kind) = sig.header.coroutine_kind {
|
|
||||||
self.check_id(coroutine_kind.closure_id());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_variant_data(&mut self, s: &'a ast::VariantData) {
|
fn visit_variant_data(&mut self, s: &'a ast::VariantData) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue