mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
67 lines
2.3 KiB
Plaintext
67 lines
2.3 KiB
Plaintext
//! Generated by `ast-generator`, do not edit by hand.
|
|
|
|
use super::base::Translator;
|
|
use super::mappings::TextValue;
|
|
use crate::emit_detached;
|
|
use crate::generated;
|
|
use crate::trap::{Label, TrapId};
|
|
use ra_ap_syntax::ast::{
|
|
HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName,
|
|
HasTypeBounds, HasVisibility, RangeItem,
|
|
};
|
|
#[rustfmt::skip]
|
|
use ra_ap_syntax::{AstNode, ast};
|
|
|
|
impl Translator<'_> {
|
|
fn emit_else_branch(&mut self, node: &ast::ElseBranch) -> Option<Label<generated::Expr>> {
|
|
match node {
|
|
ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into),
|
|
ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into),
|
|
}
|
|
}
|
|
{{#enums}}
|
|
|
|
pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option<Label<generated::{{name}}>> {
|
|
let label = match node {
|
|
{{#variants}}
|
|
ast::{{ast_name}}::{{variant_ast_name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into),
|
|
{{/variants}}
|
|
}?;
|
|
emit_detached!({{name}}, self, node, label);
|
|
Some(label)
|
|
}
|
|
{{/enums}}
|
|
{{#nodes}}
|
|
|
|
pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option<Label<generated::{{name}}>> {
|
|
{{#has_attrs}}
|
|
if self.should_be_excluded(node) { return None; }
|
|
{{/has_attrs}}
|
|
{{#fields}}
|
|
{{#predicate}}
|
|
let {{name}} = node.{{method}}().is_some();
|
|
{{/predicate}}
|
|
{{#string}}
|
|
let {{name}} = node.try_get_text();
|
|
{{/string}}
|
|
{{#list}}
|
|
let {{name}} = node.{{method}}().filter_map(|x| self.emit_{{snake_case_ty}}(&x)).collect();
|
|
{{/list}}
|
|
{{#optional}}
|
|
let {{name}} = node.{{method}}().and_then(|x| self.emit_{{snake_case_ty}}(&x));
|
|
{{/optional}}
|
|
{{/fields}}
|
|
let label = self.trap.emit(generated::{{name}} {
|
|
id: TrapId::Star,
|
|
{{#fields}}
|
|
{{name}},
|
|
{{/fields}}
|
|
});
|
|
self.emit_location(label, node);
|
|
emit_detached!({{name}}, self, node, label);
|
|
self.emit_tokens(node, label.into(), node.syntax().children_with_tokens());
|
|
Some(label)
|
|
}
|
|
{{/nodes}}
|
|
}
|