mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-16 10:35:22 +00:00
Merge #1752
1752: Always wrap blocks into block expressions r=flodiebold a=matklad This way, things like function bodies are expressions, and we don't have to single them out Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
7faec1c300
@ -274,7 +274,7 @@ impl AstBuilder<ast::Block> {
|
||||
|
||||
impl AstBuilder<ast::Expr> {
|
||||
fn from_text(text: &str) -> ast::Expr {
|
||||
ast_node_from_file_text(&format!("fn f() {{ {}; }}", text))
|
||||
ast_node_from_file_text(&format!("const C: () = {};", text))
|
||||
}
|
||||
|
||||
pub fn unit() -> ast::Expr {
|
||||
|
@ -3,7 +3,8 @@ use hir::db::HirDatabase;
|
||||
use ra_syntax::{
|
||||
ast::{self, AstNode},
|
||||
SyntaxKind::{
|
||||
BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR, WHITESPACE,
|
||||
BLOCK_EXPR, BREAK_EXPR, COMMENT, LAMBDA_EXPR, LOOP_EXPR, MATCH_ARM, PATH_EXPR, RETURN_EXPR,
|
||||
WHITESPACE,
|
||||
},
|
||||
SyntaxNode, TextUnit,
|
||||
};
|
||||
@ -80,10 +81,12 @@ pub(crate) fn introduce_variable(mut ctx: AssistCtx<impl HirDatabase>) -> Option
|
||||
/// In general that's true for any expression, but in some cases that would produce invalid code.
|
||||
fn valid_target_expr(node: SyntaxNode) -> Option<ast::Expr> {
|
||||
match node.kind() {
|
||||
PATH_EXPR => None,
|
||||
PATH_EXPR | LOOP_EXPR => None,
|
||||
BREAK_EXPR => ast::BreakExpr::cast(node).and_then(|e| e.expr()),
|
||||
RETURN_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()),
|
||||
LOOP_EXPR => ast::ReturnExpr::cast(node).and_then(|e| e.expr()),
|
||||
BLOCK_EXPR => {
|
||||
ast::BlockExpr::cast(node).filter(|it| it.is_standalone()).map(ast::Expr::from)
|
||||
}
|
||||
_ => ast::Expr::cast(node),
|
||||
}
|
||||
}
|
||||
|
@ -65,9 +65,9 @@ pub(crate) fn move_arm_cond_to_match_guard(mut ctx: AssistCtx<impl HirDatabase>)
|
||||
"move condition to match guard",
|
||||
|edit| {
|
||||
edit.target(if_expr.syntax().text_range());
|
||||
let then_only_expr = then_block.statements().next().is_none();
|
||||
let then_only_expr = then_block.block().and_then(|it| it.statements().next()).is_none();
|
||||
|
||||
match &then_block.expr() {
|
||||
match &then_block.block().and_then(|it| it.expr()) {
|
||||
Some(then_expr) if then_only_expr => {
|
||||
edit.replace(if_expr.syntax().text_range(), then_expr.syntax().text())
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
use format_buf::format;
|
||||
use hir::db::HirDatabase;
|
||||
use ra_fmt::extract_trivial_expression;
|
||||
use ra_syntax::{ast, AstNode};
|
||||
@ -25,16 +26,21 @@ pub(crate) fn replace_if_let_with_match(mut ctx: AssistCtx<impl HirDatabase>) ->
|
||||
ctx.build()
|
||||
}
|
||||
|
||||
fn build_match_expr(expr: ast::Expr, pat1: ast::Pat, arm1: ast::Block, arm2: ast::Block) -> String {
|
||||
fn build_match_expr(
|
||||
expr: ast::Expr,
|
||||
pat1: ast::Pat,
|
||||
arm1: ast::BlockExpr,
|
||||
arm2: ast::BlockExpr,
|
||||
) -> String {
|
||||
let mut buf = String::new();
|
||||
buf.push_str(&format!("match {} {{\n", expr.syntax().text()));
|
||||
buf.push_str(&format!(" {} => {}\n", pat1.syntax().text(), format_arm(&arm1)));
|
||||
buf.push_str(&format!(" _ => {}\n", format_arm(&arm2)));
|
||||
format!(buf, "match {} {{\n", expr.syntax().text());
|
||||
format!(buf, " {} => {}\n", pat1.syntax().text(), format_arm(&arm1));
|
||||
format!(buf, " _ => {}\n", format_arm(&arm2));
|
||||
buf.push_str("}");
|
||||
buf
|
||||
}
|
||||
|
||||
fn format_arm(block: &ast::Block) -> String {
|
||||
fn format_arm(block: &ast::BlockExpr) -> String {
|
||||
match extract_trivial_expression(block) {
|
||||
None => block.syntax().text().to_string(),
|
||||
Some(e) => format!("{},", e.syntax().text()),
|
||||
|
@ -34,7 +34,8 @@ fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
|
||||
successors(token.prev_token(), |token| token.prev_token())
|
||||
}
|
||||
|
||||
pub fn extract_trivial_expression(block: &ast::Block) -> Option<ast::Expr> {
|
||||
pub fn extract_trivial_expression(expr: &ast::BlockExpr) -> Option<ast::Expr> {
|
||||
let block = expr.block()?;
|
||||
let expr = block.expr()?;
|
||||
if expr.syntax().text().contains_char('\n') {
|
||||
return None;
|
||||
|
@ -119,10 +119,10 @@ where
|
||||
expr_id: crate::expr::ExprId,
|
||||
) -> Option<Source<ast::Expr>> {
|
||||
let source_map = self.body_source_map(db);
|
||||
let expr_syntax = source_map.expr_syntax(expr_id)?;
|
||||
let expr_syntax = source_map.expr_syntax(expr_id)?.a()?;
|
||||
let source = self.source(db);
|
||||
let node = expr_syntax.to_node(&source.ast.syntax());
|
||||
ast::Expr::cast(node).map(|ast| Source { file_id: source.file_id, ast })
|
||||
let ast = expr_syntax.to_node(&source.ast.syntax());
|
||||
Some(Source { file_id: source.file_id, ast })
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@ use ra_syntax::{
|
||||
self, ArgListOwner, ArrayExprKind, LiteralKind, LoopBodyOwner, NameOwner,
|
||||
TypeAscriptionOwner,
|
||||
},
|
||||
AstNode, AstPtr, SyntaxNodePtr,
|
||||
AstNode, AstPtr,
|
||||
};
|
||||
use test_utils::tested_by;
|
||||
|
||||
@ -56,13 +56,14 @@ pub struct Body {
|
||||
/// file, so that we don't recompute types whenever some whitespace is typed.
|
||||
#[derive(Default, Debug, Eq, PartialEq)]
|
||||
pub struct BodySourceMap {
|
||||
expr_map: FxHashMap<SyntaxNodePtr, ExprId>,
|
||||
expr_map_back: ArenaMap<ExprId, SyntaxNodePtr>,
|
||||
expr_map: FxHashMap<ExprPtr, ExprId>,
|
||||
expr_map_back: ArenaMap<ExprId, ExprPtr>,
|
||||
pat_map: FxHashMap<PatPtr, PatId>,
|
||||
pat_map_back: ArenaMap<PatId, PatPtr>,
|
||||
field_map: FxHashMap<(ExprId, usize), AstPtr<ast::RecordField>>,
|
||||
}
|
||||
|
||||
type ExprPtr = Either<AstPtr<ast::Expr>, AstPtr<ast::RecordField>>;
|
||||
type PatPtr = Either<AstPtr<ast::Pat>, AstPtr<ast::SelfParam>>;
|
||||
|
||||
impl Body {
|
||||
@ -128,16 +129,12 @@ impl Index<PatId> for Body {
|
||||
}
|
||||
|
||||
impl BodySourceMap {
|
||||
pub(crate) fn expr_syntax(&self, expr: ExprId) -> Option<SyntaxNodePtr> {
|
||||
pub(crate) fn expr_syntax(&self, expr: ExprId) -> Option<ExprPtr> {
|
||||
self.expr_map_back.get(expr).cloned()
|
||||
}
|
||||
|
||||
pub(crate) fn syntax_expr(&self, ptr: SyntaxNodePtr) -> Option<ExprId> {
|
||||
self.expr_map.get(&ptr).cloned()
|
||||
}
|
||||
|
||||
pub(crate) fn node_expr(&self, node: &ast::Expr) -> Option<ExprId> {
|
||||
self.expr_map.get(&SyntaxNodePtr::new(node.syntax())).cloned()
|
||||
self.expr_map.get(&Either::A(AstPtr::new(node))).cloned()
|
||||
}
|
||||
|
||||
pub(crate) fn pat_syntax(&self, pat: PatId) -> Option<PatPtr> {
|
||||
@ -575,11 +572,12 @@ where
|
||||
current_file_id: file_id,
|
||||
}
|
||||
}
|
||||
fn alloc_expr(&mut self, expr: Expr, syntax_ptr: SyntaxNodePtr) -> ExprId {
|
||||
fn alloc_expr(&mut self, expr: Expr, ptr: AstPtr<ast::Expr>) -> ExprId {
|
||||
let ptr = Either::A(ptr);
|
||||
let id = self.exprs.alloc(expr);
|
||||
if self.current_file_id == self.original_file_id {
|
||||
self.source_map.expr_map.insert(syntax_ptr, id);
|
||||
self.source_map.expr_map_back.insert(id, syntax_ptr);
|
||||
self.source_map.expr_map.insert(ptr, id);
|
||||
self.source_map.expr_map_back.insert(id, ptr);
|
||||
}
|
||||
id
|
||||
}
|
||||
@ -601,7 +599,7 @@ where
|
||||
}
|
||||
|
||||
fn collect_expr(&mut self, expr: ast::Expr) -> ExprId {
|
||||
let syntax_ptr = SyntaxNodePtr::new(expr.syntax());
|
||||
let syntax_ptr = AstPtr::new(&expr);
|
||||
match expr {
|
||||
ast::Expr::IfExpr(e) => {
|
||||
let then_branch = self.collect_block_opt(e.then_branch());
|
||||
@ -640,10 +638,10 @@ where
|
||||
self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr)
|
||||
}
|
||||
ast::Expr::TryBlockExpr(e) => {
|
||||
let body = self.collect_block_opt(e.block());
|
||||
let body = self.collect_block_opt(e.body());
|
||||
self.alloc_expr(Expr::TryBlock { body }, syntax_ptr)
|
||||
}
|
||||
ast::Expr::BlockExpr(e) => self.collect_block_opt(e.block()),
|
||||
ast::Expr::BlockExpr(e) => self.collect_block(e),
|
||||
ast::Expr::LoopExpr(e) => {
|
||||
let body = self.collect_block_opt(e.loop_body());
|
||||
self.alloc_expr(Expr::Loop { body }, syntax_ptr)
|
||||
@ -739,7 +737,7 @@ where
|
||||
ast::Expr::ParenExpr(e) => {
|
||||
let inner = self.collect_expr_opt(e.expr());
|
||||
// make the paren expr point to the inner expression as well
|
||||
self.source_map.expr_map.insert(syntax_ptr, inner);
|
||||
self.source_map.expr_map.insert(Either::A(syntax_ptr), inner);
|
||||
inner
|
||||
}
|
||||
ast::Expr::ReturnExpr(e) => {
|
||||
@ -763,12 +761,9 @@ where
|
||||
} else if let Some(nr) = field.name_ref() {
|
||||
// field shorthand
|
||||
let id = self.exprs.alloc(Expr::Path(Path::from_name_ref(&nr)));
|
||||
self.source_map
|
||||
.expr_map
|
||||
.insert(SyntaxNodePtr::new(nr.syntax()), id);
|
||||
self.source_map
|
||||
.expr_map_back
|
||||
.insert(id, SyntaxNodePtr::new(nr.syntax()));
|
||||
let ptr = Either::B(AstPtr::new(&field));
|
||||
self.source_map.expr_map.insert(ptr, id);
|
||||
self.source_map.expr_map_back.insert(id, ptr);
|
||||
id
|
||||
} else {
|
||||
self.exprs.alloc(Expr::Missing)
|
||||
@ -942,7 +937,12 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn collect_block(&mut self, block: ast::Block) -> ExprId {
|
||||
fn collect_block(&mut self, expr: ast::BlockExpr) -> ExprId {
|
||||
let syntax_node_ptr = AstPtr::new(&expr.clone().into());
|
||||
let block = match expr.block() {
|
||||
Some(block) => block,
|
||||
None => return self.alloc_expr(Expr::Missing, syntax_node_ptr),
|
||||
};
|
||||
let statements = block
|
||||
.statements()
|
||||
.map(|s| match s {
|
||||
@ -956,11 +956,11 @@ where
|
||||
})
|
||||
.collect();
|
||||
let tail = block.expr().map(|e| self.collect_expr(e));
|
||||
self.alloc_expr(Expr::Block { statements, tail }, SyntaxNodePtr::new(block.syntax()))
|
||||
self.alloc_expr(Expr::Block { statements, tail }, syntax_node_ptr)
|
||||
}
|
||||
|
||||
fn collect_block_opt(&mut self, block: Option<ast::Block>) -> ExprId {
|
||||
if let Some(block) = block {
|
||||
fn collect_block_opt(&mut self, expr: Option<ast::BlockExpr>) -> ExprId {
|
||||
if let Some(block) = expr {
|
||||
self.collect_block(block)
|
||||
} else {
|
||||
self.exprs.alloc(Expr::Missing)
|
||||
|
@ -172,7 +172,7 @@ fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut ExprScopes, scope
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use ra_db::SourceDatabase;
|
||||
use ra_syntax::{algo::find_node_at_offset, ast, AstNode, SyntaxNodePtr};
|
||||
use ra_syntax::{algo::find_node_at_offset, ast, AstNode};
|
||||
use test_utils::{assert_eq_text, extract_offset};
|
||||
|
||||
use crate::{mock::MockDatabase, source_binder::SourceAnalyzer};
|
||||
@ -194,8 +194,7 @@ mod tests {
|
||||
let analyzer = SourceAnalyzer::new(&db, file_id, marker.syntax(), None);
|
||||
|
||||
let scopes = analyzer.scopes();
|
||||
let expr_id =
|
||||
analyzer.body_source_map().syntax_expr(SyntaxNodePtr::new(marker.syntax())).unwrap();
|
||||
let expr_id = analyzer.body_source_map().node_expr(&marker.into()).unwrap();
|
||||
let scope = scopes.scope_for(expr_id);
|
||||
|
||||
let actual = scopes
|
||||
|
@ -1,7 +1,7 @@
|
||||
use rustc_hash::FxHashSet;
|
||||
use std::sync::Arc;
|
||||
|
||||
use ra_syntax::ast::{AstNode, RecordLit};
|
||||
use ra_syntax::ast::{self, AstNode};
|
||||
use rustc_hash::FxHashSet;
|
||||
|
||||
use super::{Expr, ExprId, RecordLitField};
|
||||
use crate::{
|
||||
@ -13,7 +13,6 @@ use crate::{
|
||||
ty::{ApplicationTy, InferenceResult, Ty, TypeCtor},
|
||||
Function, HasSource, HirDatabase, ModuleDef, Name, Path, PerNs, Resolution,
|
||||
};
|
||||
use ra_syntax::ast;
|
||||
|
||||
pub(crate) struct ExprValidator<'a, 'b: 'a> {
|
||||
func: Function,
|
||||
@ -84,8 +83,12 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
|
||||
let source_file = parse.tree();
|
||||
if let Some(field_list_node) = source_map
|
||||
.expr_syntax(id)
|
||||
.and_then(|ptr| ptr.a())
|
||||
.map(|ptr| ptr.to_node(source_file.syntax()))
|
||||
.and_then(RecordLit::cast)
|
||||
.and_then(|expr| match expr {
|
||||
ast::Expr::RecordLit(it) => Some(it),
|
||||
_ => None,
|
||||
})
|
||||
.and_then(|lit| lit.record_field_list())
|
||||
{
|
||||
let field_list_ptr = AstPtr::new(&field_list_node);
|
||||
@ -135,7 +138,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> {
|
||||
let source_map = self.func.body_source_map(db);
|
||||
let file_id = self.func.source(db).file_id;
|
||||
|
||||
if let Some(expr) = source_map.expr_syntax(id).and_then(|n| n.cast::<ast::Expr>()) {
|
||||
if let Some(expr) = source_map.expr_syntax(id).and_then(|n| n.a()) {
|
||||
self.sink.push(MissingOkInTailExpr { file: file_id, expr });
|
||||
}
|
||||
}
|
||||
|
@ -462,8 +462,8 @@ fn scope_for(
|
||||
node: &SyntaxNode,
|
||||
) -> Option<ScopeId> {
|
||||
node.ancestors()
|
||||
.map(|it| SyntaxNodePtr::new(&it))
|
||||
.filter_map(|ptr| source_map.syntax_expr(ptr))
|
||||
.filter_map(ast::Expr::cast)
|
||||
.filter_map(|it| source_map.node_expr(&it))
|
||||
.find_map(|it| scopes.scope_for(it))
|
||||
}
|
||||
|
||||
@ -475,7 +475,10 @@ fn scope_for_offset(
|
||||
scopes
|
||||
.scope_by_expr()
|
||||
.iter()
|
||||
.filter_map(|(id, scope)| Some((source_map.expr_syntax(*id)?, scope)))
|
||||
.filter_map(|(id, scope)| {
|
||||
let ast_ptr = source_map.expr_syntax(*id)?.a()?;
|
||||
Some((ast_ptr.syntax_node_ptr(), scope))
|
||||
})
|
||||
// find containing scope
|
||||
.min_by_key(|(ptr, _scope)| {
|
||||
(!(ptr.range().start() <= offset && offset <= ptr.range().end()), ptr.range().len())
|
||||
@ -495,7 +498,10 @@ fn adjust(
|
||||
let child_scopes = scopes
|
||||
.scope_by_expr()
|
||||
.iter()
|
||||
.filter_map(|(id, scope)| Some((source_map.expr_syntax(*id)?, scope)))
|
||||
.filter_map(|(id, scope)| {
|
||||
let ast_ptr = source_map.expr_syntax(*id)?.a()?;
|
||||
Some((ast_ptr.syntax_node_ptr(), scope))
|
||||
})
|
||||
.map(|(ptr, scope)| (ptr.range(), scope))
|
||||
.filter(|(range, _)| range.start() <= offset && range.is_subrange(&r) && *range != r);
|
||||
|
||||
|
@ -3582,7 +3582,7 @@ fn infer(content: &str) -> String {
|
||||
|
||||
for (expr, ty) in inference_result.type_of_expr.iter() {
|
||||
let syntax_ptr = match body_source_map.expr_syntax(expr) {
|
||||
Some(sp) => sp,
|
||||
Some(sp) => sp.either(|it| it.syntax_node_ptr(), |it| it.syntax_node_ptr()),
|
||||
None => continue,
|
||||
};
|
||||
types.push((syntax_ptr, ty));
|
||||
|
@ -123,7 +123,7 @@ fn has_comma_after(node: &SyntaxNode) -> bool {
|
||||
fn join_single_expr_block(edit: &mut TextEditBuilder, token: &SyntaxToken) -> Option<()> {
|
||||
let block = ast::Block::cast(token.parent())?;
|
||||
let block_expr = ast::BlockExpr::cast(block.syntax().parent()?)?;
|
||||
let expr = extract_trivial_expression(&block)?;
|
||||
let expr = extract_trivial_expression(&block_expr)?;
|
||||
|
||||
let block_range = block_expr.syntax().text_range();
|
||||
let mut buf = expr.syntax().text().to_string();
|
||||
|
@ -116,6 +116,7 @@ SOURCE_FILE@[0; 11)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 11)
|
||||
BLOCK@[9; 11)
|
||||
L_CURLY@[9; 10) "{"
|
||||
R_CURLY@[10; 11) "}"
|
||||
@ -148,6 +149,7 @@ SOURCE_FILE@[0; 60)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 60)
|
||||
BLOCK@[10; 60)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
@ -190,6 +192,7 @@ FN_DEF@[0; 11)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 11)
|
||||
BLOCK@[9; 11)
|
||||
L_CURLY@[9; 10) "{"
|
||||
R_CURLY@[10; 11) "}"
|
||||
@ -258,6 +261,7 @@ SOURCE_FILE@[0; 12)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 12)
|
||||
BLOCK@[9; 12)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) "\n"
|
||||
@ -292,6 +296,7 @@ SOURCE_FILE@[0; 12)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 12)
|
||||
BLOCK@[9; 12)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) "\n"
|
||||
@ -325,6 +330,7 @@ SOURCE_FILE@[0; 25)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 12)
|
||||
BLOCK@[9; 12)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) "\n"
|
||||
@ -339,6 +345,7 @@ SOURCE_FILE@[0; 25)
|
||||
L_PAREN@[19; 20) "("
|
||||
R_PAREN@[20; 21) ")"
|
||||
WHITESPACE@[21; 22) " "
|
||||
BLOCK_EXPR@[22; 25)
|
||||
BLOCK@[22; 25)
|
||||
L_CURLY@[22; 23) "{"
|
||||
WHITESPACE@[23; 24) "\n"
|
||||
|
@ -678,6 +678,7 @@ fn test_expr_order() {
|
||||
PARAM_LIST@[5; 7)
|
||||
L_PAREN@[5; 6) "("
|
||||
R_PAREN@[6; 7) ")"
|
||||
BLOCK_EXPR@[7; 15)
|
||||
BLOCK@[7; 15)
|
||||
L_CURLY@[7; 8) "{"
|
||||
EXPR_STMT@[8; 14)
|
||||
|
@ -144,7 +144,7 @@ pub(crate) fn reparser(
|
||||
parent: Option<SyntaxKind>,
|
||||
) -> Option<fn(&mut Parser)> {
|
||||
let res = match node {
|
||||
BLOCK => expressions::block,
|
||||
BLOCK => expressions::naked_block,
|
||||
RECORD_FIELD_DEF_LIST => items::record_field_def_list,
|
||||
RECORD_FIELD_LIST => items::record_field_list,
|
||||
ENUM_VARIANT_LIST => items::enum_variant_list,
|
||||
|
@ -40,6 +40,11 @@ pub(crate) fn block(p: &mut Parser) {
|
||||
p.error("expected a block");
|
||||
return;
|
||||
}
|
||||
atom::block_expr(p, None);
|
||||
}
|
||||
|
||||
pub(crate) fn naked_block(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump();
|
||||
expr_block_contents(p);
|
||||
|
@ -463,10 +463,10 @@ fn match_guard(p: &mut Parser) -> CompletedMarker {
|
||||
// unsafe {};
|
||||
// 'label: {};
|
||||
// }
|
||||
fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
|
||||
pub(super) fn block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = m.unwrap_or_else(|| p.start());
|
||||
block(p);
|
||||
naked_block(p);
|
||||
m.complete(p, BLOCK_EXPR)
|
||||
}
|
||||
|
||||
|
@ -9,12 +9,12 @@ use crate::{
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum ElseBranch {
|
||||
Block(ast::Block),
|
||||
Block(ast::BlockExpr),
|
||||
IfExpr(ast::IfExpr),
|
||||
}
|
||||
|
||||
impl ast::IfExpr {
|
||||
pub fn then_branch(&self) -> Option<ast::Block> {
|
||||
pub fn then_branch(&self) -> Option<ast::BlockExpr> {
|
||||
self.blocks().nth(0)
|
||||
}
|
||||
pub fn else_branch(&self) -> Option<ElseBranch> {
|
||||
@ -28,7 +28,7 @@ impl ast::IfExpr {
|
||||
Some(res)
|
||||
}
|
||||
|
||||
fn blocks(&self) -> AstChildren<ast::Block> {
|
||||
fn blocks(&self) -> AstChildren<ast::BlockExpr> {
|
||||
children(self)
|
||||
}
|
||||
}
|
||||
@ -289,6 +289,26 @@ impl ast::Literal {
|
||||
}
|
||||
}
|
||||
|
||||
impl ast::BlockExpr {
|
||||
/// false if the block is an intrinsic part of the syntax and can't be
|
||||
/// replaced with arbitrary expression.
|
||||
///
|
||||
/// ```not_rust
|
||||
/// fn foo() { not_stand_alone }
|
||||
/// const FOO: () = { stand_alone };
|
||||
/// ```
|
||||
pub fn is_standalone(&self) -> bool {
|
||||
let kind = match self.syntax().parent() {
|
||||
None => return true,
|
||||
Some(it) => it.kind(),
|
||||
};
|
||||
match kind {
|
||||
FN_DEF | MATCH_ARM | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_literal_with_attr() {
|
||||
let parse = ast::SourceFile::parse(r#"const _: &str = { #[attr] "Hello" };"#);
|
||||
|
@ -1003,7 +1003,7 @@ impl FnDef {
|
||||
pub fn param_list(&self) -> Option<ParamList> {
|
||||
AstChildren::new(&self.syntax).next()
|
||||
}
|
||||
pub fn body(&self) -> Option<Block> {
|
||||
pub fn body(&self) -> Option<BlockExpr> {
|
||||
AstChildren::new(&self.syntax).next()
|
||||
}
|
||||
pub fn ret_type(&self) -> Option<RetType> {
|
||||
@ -3135,7 +3135,7 @@ impl AstNode for TryBlockExpr {
|
||||
}
|
||||
}
|
||||
impl TryBlockExpr {
|
||||
pub fn block(&self) -> Option<Block> {
|
||||
pub fn body(&self) -> Option<BlockExpr> {
|
||||
AstChildren::new(&self.syntax).next()
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ pub trait VisibilityOwner: AstNode {
|
||||
}
|
||||
|
||||
pub trait LoopBodyOwner: AstNode {
|
||||
fn loop_body(&self) -> Option<ast::Block> {
|
||||
fn loop_body(&self) -> Option<ast::BlockExpr> {
|
||||
child_opt(self)
|
||||
}
|
||||
}
|
||||
|
@ -275,7 +275,7 @@ Grammar(
|
||||
"AttrsOwner",
|
||||
"DocCommentsOwner"
|
||||
],
|
||||
options: [ "ParamList", ["body", "Block"], "RetType" ],
|
||||
options: [ "ParamList", ["body", "BlockExpr"], "RetType" ],
|
||||
),
|
||||
"RetType": (options: ["TypeRef"]),
|
||||
"StructDef": (
|
||||
@ -426,7 +426,7 @@ Grammar(
|
||||
traits: ["LoopBodyOwner"],
|
||||
),
|
||||
"TryBlockExpr": (
|
||||
options: ["Block"],
|
||||
options: [["body", "BlockExpr"]],
|
||||
),
|
||||
"ForExpr": (
|
||||
traits: ["LoopBodyOwner"],
|
||||
|
@ -203,7 +203,8 @@ fn api_walkthrough() {
|
||||
assert_eq!(name.text(), "foo");
|
||||
|
||||
// Let's get the `1 + 1` expression!
|
||||
let block: ast::Block = func.body().unwrap();
|
||||
let body: ast::BlockExpr = func.body().unwrap();
|
||||
let block = body.block().unwrap();
|
||||
let expr: ast::Expr = block.expr().unwrap();
|
||||
|
||||
// Enums are used to group related ast nodes together, and can be used for
|
||||
|
@ -97,7 +97,7 @@ pub(crate) fn validate(root: &SyntaxNode) -> Vec<SyntaxError> {
|
||||
for node in root.descendants() {
|
||||
let _ = visitor_ctx(&mut errors)
|
||||
.visit::<ast::Literal, _>(validate_literal)
|
||||
.visit::<ast::Block, _>(block::validate_block_node)
|
||||
.visit::<ast::BlockExpr, _>(block::validate_block_expr)
|
||||
.visit::<ast::FieldExpr, _>(|it, errors| validate_numeric_name(it.name_ref(), errors))
|
||||
.visit::<ast::RecordField, _>(|it, errors| validate_numeric_name(it.name_ref(), errors))
|
||||
.accept(&node);
|
||||
|
@ -5,18 +5,18 @@ use crate::{
|
||||
SyntaxKind::*,
|
||||
};
|
||||
|
||||
pub(crate) fn validate_block_node(node: ast::Block, errors: &mut Vec<SyntaxError>) {
|
||||
if let Some(parent) = node.syntax().parent() {
|
||||
pub(crate) fn validate_block_expr(expr: ast::BlockExpr, errors: &mut Vec<SyntaxError>) {
|
||||
if let Some(parent) = expr.syntax().parent() {
|
||||
match parent.kind() {
|
||||
FN_DEF => return,
|
||||
BLOCK_EXPR => match parent.parent().map(|v| v.kind()) {
|
||||
Some(EXPR_STMT) | Some(BLOCK) => return,
|
||||
_ => {}
|
||||
},
|
||||
FN_DEF | EXPR_STMT | BLOCK => return,
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
if let Some(block) = expr.block() {
|
||||
errors.extend(
|
||||
node.attrs().map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().text_range())),
|
||||
block
|
||||
.attrs()
|
||||
.map(|attr| SyntaxError::new(InvalidBlockAttr, attr.syntax().text_range())),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@ SOURCE_FILE@[0; 54)
|
||||
L_PAREN@[25; 26) "("
|
||||
R_PAREN@[26; 27) ")"
|
||||
WHITESPACE@[27; 28) " "
|
||||
BLOCK_EXPR@[28; 31)
|
||||
BLOCK@[28; 31)
|
||||
L_CURLY@[28; 29) "{"
|
||||
WHITESPACE@[29; 30) "\n"
|
||||
|
@ -20,6 +20,7 @@ SOURCE_FILE@[0; 31)
|
||||
PARAM_LIST@[23; 25)
|
||||
L_PAREN@[23; 24) "("
|
||||
R_PAREN@[24; 25) ")"
|
||||
BLOCK_EXPR@[25; 27)
|
||||
BLOCK@[25; 27)
|
||||
L_CURLY@[25; 26) "{"
|
||||
R_CURLY@[26; 27) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 95)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 12)
|
||||
BLOCK@[9; 12)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) "\n"
|
||||
@ -32,6 +33,7 @@ SOURCE_FILE@[0; 95)
|
||||
LITERAL@[29; 33)
|
||||
TRUE_KW@[29; 33) "true"
|
||||
WHITESPACE@[33; 34) " "
|
||||
BLOCK_EXPR@[34; 51)
|
||||
BLOCK@[34; 51)
|
||||
L_CURLY@[34; 35) "{"
|
||||
WHITESPACE@[35; 44) "\n "
|
||||
@ -42,6 +44,7 @@ SOURCE_FILE@[0; 95)
|
||||
WHITESPACE@[51; 52) " "
|
||||
ELSE_KW@[52; 56) "else"
|
||||
WHITESPACE@[56; 57) " "
|
||||
BLOCK_EXPR@[57; 78)
|
||||
BLOCK@[57; 78)
|
||||
L_CURLY@[57; 58) "{"
|
||||
WHITESPACE@[58; 67) "\n "
|
||||
@ -67,6 +70,7 @@ SOURCE_FILE@[0; 95)
|
||||
L_PAREN@[88; 89) "("
|
||||
R_PAREN@[89; 90) ")"
|
||||
WHITESPACE@[90; 91) " "
|
||||
BLOCK_EXPR@[91; 94)
|
||||
BLOCK@[91; 94)
|
||||
L_CURLY@[91; 92) "{"
|
||||
WHITESPACE@[92; 93) "\n"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 42)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 41)
|
||||
BLOCK@[10; 41)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -24,6 +24,7 @@ SOURCE_FILE@[0; 23)
|
||||
NAME_REF@[18; 19)
|
||||
IDENT@[18; 19) "T"
|
||||
WHITESPACE@[19; 20) " "
|
||||
BLOCK_EXPR@[20; 22)
|
||||
BLOCK@[20; 22)
|
||||
L_CURLY@[20; 21) "{"
|
||||
R_CURLY@[21; 22) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 56)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 55)
|
||||
BLOCK@[9; 55)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -19,6 +19,7 @@ SOURCE_FILE@[0; 47)
|
||||
IDENT@[12; 15) "i32"
|
||||
R_PAREN@[15; 16) ")"
|
||||
WHITESPACE@[16; 17) " "
|
||||
BLOCK_EXPR@[17; 46)
|
||||
BLOCK@[17; 46)
|
||||
L_CURLY@[17; 18) "{"
|
||||
WHITESPACE@[18; 23) "\n "
|
||||
|
@ -32,6 +32,7 @@ SOURCE_FILE@[0; 183)
|
||||
NAME_REF@[39; 46)
|
||||
IDENT@[39; 46) "ScopeId"
|
||||
WHITESPACE@[46; 47) " "
|
||||
BLOCK_EXPR@[47; 161)
|
||||
BLOCK@[47; 161)
|
||||
L_CURLY@[47; 48) "{"
|
||||
WHITESPACE@[48; 57) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 139)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 138)
|
||||
BLOCK@[9; 138)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
@ -60,6 +61,7 @@ SOURCE_FILE@[0; 139)
|
||||
LITERAL@[83; 87)
|
||||
TRUE_KW@[83; 87) "true"
|
||||
WHITESPACE@[87; 88) " "
|
||||
BLOCK_EXPR@[88; 90)
|
||||
BLOCK@[88; 90)
|
||||
L_CURLY@[88; 89) "{"
|
||||
R_CURLY@[89; 90) "}"
|
||||
@ -75,6 +77,7 @@ SOURCE_FILE@[0; 139)
|
||||
LITERAL@[109; 113)
|
||||
TRUE_KW@[109; 113) "true"
|
||||
WHITESPACE@[113; 114) " "
|
||||
BLOCK_EXPR@[114; 116)
|
||||
BLOCK@[114; 116)
|
||||
L_CURLY@[114; 115) "{"
|
||||
R_CURLY@[115; 116) "}"
|
||||
@ -85,6 +88,7 @@ SOURCE_FILE@[0; 139)
|
||||
LOOP_EXPR@[129; 136)
|
||||
LOOP_KW@[129; 133) "loop"
|
||||
WHITESPACE@[133; 134) " "
|
||||
BLOCK_EXPR@[134; 136)
|
||||
BLOCK@[134; 136)
|
||||
L_CURLY@[134; 135) "{"
|
||||
R_CURLY@[135; 136) "}"
|
||||
|
@ -11,6 +11,7 @@ SOURCE_FILE@[0; 16)
|
||||
L_PAREN@[10; 11) "("
|
||||
R_PAREN@[11; 12) ")"
|
||||
WHITESPACE@[12; 13) " "
|
||||
BLOCK_EXPR@[13; 15)
|
||||
BLOCK@[13; 15)
|
||||
L_CURLY@[13; 14) "{"
|
||||
R_CURLY@[14; 15) "}"
|
||||
|
@ -25,6 +25,7 @@ SOURCE_FILE@[0; 22)
|
||||
IDENT@[15; 16) "y"
|
||||
R_PAREN@[16; 17) ")"
|
||||
WHITESPACE@[17; 18) " "
|
||||
BLOCK_EXPR@[18; 21)
|
||||
BLOCK@[18; 21)
|
||||
L_CURLY@[18; 19) "{"
|
||||
WHITESPACE@[19; 20) "\n"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
|
||||
L_PAREN@[4; 5) "("
|
||||
R_PAREN@[5; 6) ")"
|
||||
WHITESPACE@[6; 7) " "
|
||||
BLOCK_EXPR@[7; 33)
|
||||
BLOCK@[7; 33)
|
||||
L_CURLY@[7; 8) "{"
|
||||
WHITESPACE@[8; 9) " "
|
||||
@ -50,6 +51,7 @@ SOURCE_FILE@[0; 112)
|
||||
L_PAREN@[38; 39) "("
|
||||
R_PAREN@[39; 40) ")"
|
||||
WHITESPACE@[40; 41) " "
|
||||
BLOCK_EXPR@[41; 68)
|
||||
BLOCK@[41; 68)
|
||||
L_CURLY@[41; 42) "{"
|
||||
WHITESPACE@[42; 43) " "
|
||||
@ -99,6 +101,7 @@ SOURCE_FILE@[0; 112)
|
||||
L_PAREN@[73; 74) "("
|
||||
R_PAREN@[74; 75) ")"
|
||||
WHITESPACE@[75; 76) " "
|
||||
BLOCK_EXPR@[76; 111)
|
||||
BLOCK@[76; 111)
|
||||
L_CURLY@[76; 77) "{"
|
||||
WHITESPACE@[77; 78) " "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 94)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 55)
|
||||
BLOCK@[10; 55)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -61,6 +61,7 @@ SOURCE_FILE@[0; 240)
|
||||
L_PAREN@[48; 49) "("
|
||||
R_PAREN@[49; 50) ")"
|
||||
WHITESPACE@[50; 51) " "
|
||||
BLOCK_EXPR@[51; 53)
|
||||
BLOCK@[51; 53)
|
||||
L_CURLY@[51; 52) "{"
|
||||
R_CURLY@[52; 53) "}"
|
||||
@ -74,6 +75,7 @@ SOURCE_FILE@[0; 240)
|
||||
L_PAREN@[62; 63) "("
|
||||
R_PAREN@[63; 64) ")"
|
||||
WHITESPACE@[64; 65) " "
|
||||
BLOCK_EXPR@[65; 239)
|
||||
BLOCK@[65; 239)
|
||||
L_CURLY@[65; 66) "{"
|
||||
WHITESPACE@[66; 71) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 575)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 574)
|
||||
BLOCK@[10; 574)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -20,6 +20,7 @@ SOURCE_FILE@[0; 30)
|
||||
LIFETIME@[23; 25) "\'a"
|
||||
R_ANGLE@[25; 26) ">"
|
||||
WHITESPACE@[26; 27) "\n"
|
||||
BLOCK_EXPR@[27; 29)
|
||||
BLOCK@[27; 29)
|
||||
L_CURLY@[27; 28) "{"
|
||||
R_CURLY@[28; 29) "}"
|
||||
|
@ -73,6 +73,7 @@ SOURCE_FILE@[0; 349)
|
||||
L_PAREN@[125; 126) "("
|
||||
R_PAREN@[126; 127) ")"
|
||||
WHITESPACE@[127; 128) " "
|
||||
BLOCK_EXPR@[128; 348)
|
||||
BLOCK@[128; 348)
|
||||
L_CURLY@[128; 129) "{"
|
||||
WHITESPACE@[129; 134) "\n "
|
||||
|
@ -19,6 +19,7 @@ SOURCE_FILE@[0; 24)
|
||||
IDENT@[10; 11) "A"
|
||||
R_PAREN@[11; 12) ")"
|
||||
WHITESPACE@[12; 13) " "
|
||||
BLOCK_EXPR@[13; 23)
|
||||
BLOCK@[13; 23)
|
||||
L_CURLY@[13; 14) "{"
|
||||
WHITESPACE@[14; 19) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 350)
|
||||
L_PAREN@[8; 9) "("
|
||||
R_PAREN@[9; 10) ")"
|
||||
WHITESPACE@[10; 11) " "
|
||||
BLOCK_EXPR@[11; 349)
|
||||
BLOCK@[11; 349)
|
||||
L_CURLY@[11; 12) "{"
|
||||
WHITESPACE@[12; 17) "\n "
|
||||
@ -49,6 +50,7 @@ SOURCE_FILE@[0; 350)
|
||||
LITERAL@[137; 141)
|
||||
TRUE_KW@[137; 141) "true"
|
||||
WHITESPACE@[141; 142) " "
|
||||
BLOCK_EXPR@[142; 257)
|
||||
BLOCK@[142; 257)
|
||||
L_CURLY@[142; 143) "{"
|
||||
WHITESPACE@[143; 152) "\n "
|
||||
@ -87,6 +89,7 @@ SOURCE_FILE@[0; 350)
|
||||
LITERAL@[268; 272)
|
||||
TRUE_KW@[268; 272) "true"
|
||||
WHITESPACE@[272; 273) " "
|
||||
BLOCK_EXPR@[273; 347)
|
||||
BLOCK@[273; 347)
|
||||
L_CURLY@[273; 274) "{"
|
||||
WHITESPACE@[274; 283) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 293)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 292)
|
||||
BLOCK@[9; 292)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 89)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 88)
|
||||
BLOCK@[9; 88)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 91)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 89)
|
||||
BLOCK@[10; 89)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 30)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 29)
|
||||
BLOCK@[10; 29)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -7,6 +7,7 @@ SOURCE_FILE@[0; 33)
|
||||
PARAM_LIST@[6; 8)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
BLOCK_EXPR@[8; 10)
|
||||
BLOCK@[8; 10)
|
||||
L_CURLY@[8; 9) "{"
|
||||
R_CURLY@[9; 10) "}"
|
||||
@ -27,6 +28,7 @@ SOURCE_FILE@[0; 33)
|
||||
PARAM_LIST@[28; 30)
|
||||
L_PAREN@[28; 29) "("
|
||||
R_PAREN@[29; 30) ")"
|
||||
BLOCK_EXPR@[30; 32)
|
||||
BLOCK@[30; 32)
|
||||
L_CURLY@[30; 31) "{"
|
||||
R_CURLY@[31; 32) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 30)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 29)
|
||||
BLOCK@[9; 29)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) " "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 20)
|
||||
BLOCK@[9; 20)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) " "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 48)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 47)
|
||||
BLOCK@[9; 47)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 14) "\n "
|
||||
@ -44,6 +45,7 @@ SOURCE_FILE@[0; 48)
|
||||
LITERAL@[37; 41)
|
||||
TRUE_KW@[37; 41) "true"
|
||||
WHITESPACE@[41; 42) " "
|
||||
BLOCK_EXPR@[42; 44)
|
||||
BLOCK@[42; 44)
|
||||
L_CURLY@[42; 43) "{"
|
||||
R_CURLY@[43; 44) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 47)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 46)
|
||||
BLOCK@[9; 46)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -13,6 +13,7 @@ SOURCE_FILE@[0; 50)
|
||||
L_PAREN@[19; 20) "("
|
||||
R_PAREN@[20; 21) ")"
|
||||
WHITESPACE@[21; 22) " "
|
||||
BLOCK_EXPR@[22; 24)
|
||||
BLOCK@[22; 24)
|
||||
L_CURLY@[22; 23) "{"
|
||||
R_CURLY@[23; 24) "}"
|
||||
@ -31,6 +32,7 @@ SOURCE_FILE@[0; 50)
|
||||
L_PAREN@[44; 45) "("
|
||||
R_PAREN@[45; 46) ")"
|
||||
WHITESPACE@[46; 47) " "
|
||||
BLOCK_EXPR@[47; 49)
|
||||
BLOCK@[47; 49)
|
||||
L_CURLY@[47; 48) "{"
|
||||
R_CURLY@[48; 49) "}"
|
||||
|
@ -44,6 +44,7 @@ SOURCE_FILE@[0; 62)
|
||||
L_PAREN@[54; 55) "("
|
||||
R_PAREN@[55; 56) ")"
|
||||
WHITESPACE@[56; 57) " "
|
||||
BLOCK_EXPR@[57; 59)
|
||||
BLOCK@[57; 59)
|
||||
L_CURLY@[57; 58) "{"
|
||||
R_CURLY@[58; 59) "}"
|
||||
|
@ -50,6 +50,7 @@ SOURCE_FILE@[0; 83)
|
||||
L_PAREN@[56; 57) "("
|
||||
R_PAREN@[57; 58) ")"
|
||||
WHITESPACE@[58; 59) " "
|
||||
BLOCK_EXPR@[59; 61)
|
||||
BLOCK@[59; 61)
|
||||
L_CURLY@[59; 60) "{"
|
||||
R_CURLY@[60; 61) "}"
|
||||
|
@ -54,6 +54,7 @@ SOURCE_FILE@[0; 49)
|
||||
IDENT@[40; 43) "str"
|
||||
R_PAREN@[43; 44) ")"
|
||||
WHITESPACE@[44; 45) "\n"
|
||||
BLOCK_EXPR@[45; 48)
|
||||
BLOCK@[45; 48)
|
||||
L_CURLY@[45; 46) "{"
|
||||
WHITESPACE@[46; 47) " "
|
||||
|
@ -31,6 +31,7 @@ SOURCE_FILE@[0; 28)
|
||||
PARAM_LIST@[23; 25)
|
||||
L_PAREN@[23; 24) "("
|
||||
R_PAREN@[24; 25) ")"
|
||||
BLOCK_EXPR@[25; 27)
|
||||
BLOCK@[25; 27)
|
||||
L_CURLY@[25; 26) "{"
|
||||
R_CURLY@[26; 27) "}"
|
||||
|
@ -22,6 +22,7 @@ SOURCE_FILE@[0; 128)
|
||||
SELF_KW@[18; 22) "self"
|
||||
R_PAREN@[22; 23) ")"
|
||||
WHITESPACE@[23; 24) " "
|
||||
BLOCK_EXPR@[24; 26)
|
||||
BLOCK@[24; 26)
|
||||
L_CURLY@[24; 25) "{"
|
||||
R_CURLY@[25; 26) "}"
|
||||
@ -39,6 +40,7 @@ SOURCE_FILE@[0; 128)
|
||||
COMMA@[41; 42) ","
|
||||
R_PAREN@[42; 43) ")"
|
||||
WHITESPACE@[43; 44) " "
|
||||
BLOCK_EXPR@[44; 46)
|
||||
BLOCK@[44; 46)
|
||||
L_CURLY@[44; 45) "{"
|
||||
R_CURLY@[45; 46) "}"
|
||||
@ -58,6 +60,7 @@ SOURCE_FILE@[0; 128)
|
||||
COMMA@[64; 65) ","
|
||||
R_PAREN@[65; 66) ")"
|
||||
WHITESPACE@[66; 67) " "
|
||||
BLOCK_EXPR@[67; 69)
|
||||
BLOCK@[67; 69)
|
||||
L_CURLY@[67; 68) "{"
|
||||
R_CURLY@[68; 69) "}"
|
||||
@ -91,6 +94,7 @@ SOURCE_FILE@[0; 128)
|
||||
IDENT@[96; 99) "i32"
|
||||
R_PAREN@[99; 100) ")"
|
||||
WHITESPACE@[100; 101) " "
|
||||
BLOCK_EXPR@[101; 103)
|
||||
BLOCK@[101; 103)
|
||||
L_CURLY@[101; 102) "{"
|
||||
R_CURLY@[102; 103) "}"
|
||||
@ -108,6 +112,7 @@ SOURCE_FILE@[0; 128)
|
||||
SELF_KW@[117; 121) "self"
|
||||
R_PAREN@[121; 122) ")"
|
||||
WHITESPACE@[122; 123) " "
|
||||
BLOCK_EXPR@[123; 125)
|
||||
BLOCK@[123; 125)
|
||||
L_CURLY@[123; 124) "{"
|
||||
R_CURLY@[124; 125) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 103)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 102)
|
||||
BLOCK@[9; 102)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 26)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 25)
|
||||
BLOCK@[9; 25)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
@ -15,6 +16,7 @@ SOURCE_FILE@[0; 26)
|
||||
LOOP_EXPR@[15; 22)
|
||||
LOOP_KW@[15; 19) "loop"
|
||||
WHITESPACE@[19; 20) " "
|
||||
BLOCK_EXPR@[20; 22)
|
||||
BLOCK@[20; 22)
|
||||
L_CURLY@[20; 21) "{"
|
||||
R_CURLY@[21; 22) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 48)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 47)
|
||||
BLOCK@[9; 47)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,12 +8,14 @@ SOURCE_FILE@[0; 69)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 68)
|
||||
BLOCK@[9; 68)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
LOOP_EXPR@[15; 66)
|
||||
LOOP_KW@[15; 19) "loop"
|
||||
WHITESPACE@[19; 20) " "
|
||||
BLOCK_EXPR@[20; 66)
|
||||
BLOCK@[20; 66)
|
||||
L_CURLY@[20; 21) "{"
|
||||
WHITESPACE@[21; 30) "\n "
|
||||
|
@ -31,6 +31,7 @@ SOURCE_FILE@[0; 69)
|
||||
IDENT@[25; 29) "Self"
|
||||
R_PAREN@[29; 30) ")"
|
||||
WHITESPACE@[30; 31) " "
|
||||
BLOCK_EXPR@[31; 33)
|
||||
BLOCK@[31; 33)
|
||||
L_CURLY@[31; 32) "{"
|
||||
R_CURLY@[32; 33) "}"
|
||||
@ -64,6 +65,7 @@ SOURCE_FILE@[0; 69)
|
||||
R_ANGLE@[61; 62) ">"
|
||||
R_PAREN@[62; 63) ")"
|
||||
WHITESPACE@[63; 64) " "
|
||||
BLOCK_EXPR@[64; 66)
|
||||
BLOCK@[64; 66)
|
||||
L_CURLY@[64; 65) "{"
|
||||
R_CURLY@[65; 66) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 44)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 43)
|
||||
BLOCK@[9; 43)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -54,6 +54,7 @@ SOURCE_FILE@[0; 89)
|
||||
L_PAREN@[60; 61) "("
|
||||
R_PAREN@[61; 62) ")"
|
||||
WHITESPACE@[62; 63) " "
|
||||
BLOCK_EXPR@[63; 65)
|
||||
BLOCK@[63; 65)
|
||||
L_CURLY@[63; 64) "{"
|
||||
R_CURLY@[64; 65) "}"
|
||||
@ -70,6 +71,7 @@ SOURCE_FILE@[0; 89)
|
||||
SELF_KW@[78; 82) "self"
|
||||
R_PAREN@[82; 83) ")"
|
||||
WHITESPACE@[83; 84) " "
|
||||
BLOCK_EXPR@[84; 86)
|
||||
BLOCK@[84; 86)
|
||||
L_CURLY@[84; 85) "{"
|
||||
R_CURLY@[85; 86) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 39)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 38)
|
||||
BLOCK@[10; 38)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 97)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 96)
|
||||
BLOCK@[9; 96)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 52)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 51)
|
||||
BLOCK@[10; 51)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 89)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 88)
|
||||
BLOCK@[9; 88)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 197)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 37)
|
||||
BLOCK@[9; 37)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) " "
|
||||
@ -35,6 +36,7 @@ SOURCE_FILE@[0; 197)
|
||||
NAME_REF@[28; 32)
|
||||
IDENT@[28; 32) "None"
|
||||
WHITESPACE@[32; 33) " "
|
||||
BLOCK_EXPR@[33; 35)
|
||||
BLOCK@[33; 35)
|
||||
L_CURLY@[33; 34) "{"
|
||||
R_CURLY@[34; 35) "}"
|
||||
@ -50,6 +52,7 @@ SOURCE_FILE@[0; 197)
|
||||
L_PAREN@[44; 45) "("
|
||||
R_PAREN@[45; 46) ")"
|
||||
WHITESPACE@[46; 47) " "
|
||||
BLOCK_EXPR@[47; 196)
|
||||
BLOCK@[47; 196)
|
||||
L_CURLY@[47; 48) "{"
|
||||
WHITESPACE@[48; 53) "\n "
|
||||
@ -90,6 +93,7 @@ SOURCE_FILE@[0; 197)
|
||||
NAME_REF@[80; 84)
|
||||
IDENT@[80; 84) "None"
|
||||
WHITESPACE@[84; 85) " "
|
||||
BLOCK_EXPR@[85; 87)
|
||||
BLOCK@[85; 87)
|
||||
L_CURLY@[85; 86) "{"
|
||||
R_CURLY@[86; 87) "}"
|
||||
@ -121,6 +125,7 @@ SOURCE_FILE@[0; 197)
|
||||
NAME_REF@[111; 115)
|
||||
IDENT@[111; 115) "None"
|
||||
WHITESPACE@[115; 116) " "
|
||||
BLOCK_EXPR@[116; 118)
|
||||
BLOCK@[116; 118)
|
||||
L_CURLY@[116; 117) "{"
|
||||
R_CURLY@[117; 118) "}"
|
||||
@ -162,6 +167,7 @@ SOURCE_FILE@[0; 197)
|
||||
NAME_REF@[153; 157)
|
||||
IDENT@[153; 157) "None"
|
||||
WHITESPACE@[157; 158) " "
|
||||
BLOCK_EXPR@[158; 160)
|
||||
BLOCK@[158; 160)
|
||||
L_CURLY@[158; 159) "{"
|
||||
R_CURLY@[159; 160) "}"
|
||||
@ -192,6 +198,7 @@ SOURCE_FILE@[0; 197)
|
||||
NAME_REF@[187; 191)
|
||||
IDENT@[187; 191) "None"
|
||||
WHITESPACE@[191; 192) " "
|
||||
BLOCK_EXPR@[192; 194)
|
||||
BLOCK@[192; 194)
|
||||
L_CURLY@[192; 193) "{"
|
||||
R_CURLY@[193; 194) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 70)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 69)
|
||||
BLOCK@[9; 69)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
@ -19,6 +20,7 @@ SOURCE_FILE@[0; 70)
|
||||
LITERAL@[21; 25)
|
||||
TRUE_KW@[21; 25) "true"
|
||||
WHITESPACE@[25; 26) " "
|
||||
BLOCK_EXPR@[26; 28)
|
||||
BLOCK@[26; 28)
|
||||
L_CURLY@[26; 27) "{"
|
||||
R_CURLY@[27; 28) "}"
|
||||
@ -57,6 +59,7 @@ SOURCE_FILE@[0; 70)
|
||||
L_PAREN@[61; 62) "("
|
||||
R_PAREN@[62; 63) ")"
|
||||
WHITESPACE@[63; 64) " "
|
||||
BLOCK_EXPR@[64; 66)
|
||||
BLOCK@[64; 66)
|
||||
L_CURLY@[64; 65) "{"
|
||||
R_CURLY@[65; 66) "}"
|
||||
|
@ -8,12 +8,14 @@ SOURCE_FILE@[0; 102)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 101)
|
||||
BLOCK@[9; 101)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
LOOP_EXPR@[15; 99)
|
||||
LOOP_KW@[15; 19) "loop"
|
||||
WHITESPACE@[19; 20) " "
|
||||
BLOCK_EXPR@[20; 99)
|
||||
BLOCK@[20; 99)
|
||||
L_CURLY@[20; 21) "{"
|
||||
WHITESPACE@[21; 30) "\n "
|
||||
|
@ -15,6 +15,7 @@ SOURCE_FILE@[0; 30)
|
||||
L_PAREN@[24; 25) "("
|
||||
R_PAREN@[25; 26) ")"
|
||||
WHITESPACE@[26; 27) " "
|
||||
BLOCK_EXPR@[27; 29)
|
||||
BLOCK@[27; 29)
|
||||
L_CURLY@[27; 28) "{"
|
||||
R_CURLY@[28; 29) "}"
|
||||
|
@ -41,6 +41,7 @@ SOURCE_FILE@[0; 71)
|
||||
L_PAREN@[33; 34) "("
|
||||
R_PAREN@[34; 35) ")"
|
||||
WHITESPACE@[35; 36) " "
|
||||
BLOCK_EXPR@[36; 70)
|
||||
BLOCK@[36; 70)
|
||||
L_CURLY@[36; 37) "{"
|
||||
WHITESPACE@[37; 38) " "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 20)
|
||||
BLOCK@[9; 20)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) " "
|
||||
|
@ -11,6 +11,7 @@ SOURCE_FILE@[0; 71)
|
||||
L_PAREN@[13; 14) "("
|
||||
R_PAREN@[14; 15) ")"
|
||||
WHITESPACE@[15; 16) " "
|
||||
BLOCK_EXPR@[16; 19)
|
||||
BLOCK@[16; 19)
|
||||
L_CURLY@[16; 17) "{"
|
||||
WHITESPACE@[17; 18) " "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 118)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 117)
|
||||
BLOCK@[9; 117)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
|
||||
L_PAREN@[4; 5) "("
|
||||
R_PAREN@[5; 6) ")"
|
||||
WHITESPACE@[6; 7) " "
|
||||
BLOCK_EXPR@[7; 20)
|
||||
BLOCK@[7; 20)
|
||||
L_CURLY@[7; 8) "{"
|
||||
WHITESPACE@[8; 9) " "
|
||||
@ -20,6 +21,7 @@ SOURCE_FILE@[0; 21)
|
||||
L_PAREN@[13; 14) "("
|
||||
R_PAREN@[14; 15) ")"
|
||||
WHITESPACE@[15; 16) " "
|
||||
BLOCK_EXPR@[16; 18)
|
||||
BLOCK@[16; 18)
|
||||
L_CURLY@[16; 17) "{"
|
||||
R_CURLY@[17; 18) "}"
|
||||
|
@ -40,6 +40,7 @@ SOURCE_FILE@[0; 35)
|
||||
PARAM_LIST@[30; 32)
|
||||
L_PAREN@[30; 31) "("
|
||||
R_PAREN@[31; 32) ")"
|
||||
BLOCK_EXPR@[32; 34)
|
||||
BLOCK@[32; 34)
|
||||
L_CURLY@[32; 33) "{"
|
||||
R_CURLY@[33; 34) "}"
|
||||
|
@ -34,6 +34,7 @@ SOURCE_FILE@[0; 58)
|
||||
LIFETIME@[20; 22) "\'f"
|
||||
R_ANGLE@[22; 23) ">"
|
||||
WHITESPACE@[23; 24) " "
|
||||
BLOCK_EXPR@[24; 26)
|
||||
BLOCK@[24; 26)
|
||||
L_CURLY@[24; 25) "{"
|
||||
R_CURLY@[25; 26) "}"
|
||||
@ -75,6 +76,7 @@ SOURCE_FILE@[0; 58)
|
||||
LIFETIME@[51; 53) "\'f"
|
||||
R_ANGLE@[53; 54) ">"
|
||||
WHITESPACE@[54; 55) " "
|
||||
BLOCK_EXPR@[55; 57)
|
||||
BLOCK@[55; 57)
|
||||
L_CURLY@[55; 56) "{"
|
||||
R_CURLY@[56; 57) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 91)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 90)
|
||||
BLOCK@[9; 90)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 113)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 112)
|
||||
BLOCK@[10; 112)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -104,6 +104,7 @@ SOURCE_FILE@[0; 116)
|
||||
TYPE_BOUND@[110; 112)
|
||||
LIFETIME@[110; 112) "\'a"
|
||||
WHITESPACE@[112; 113) "\n"
|
||||
BLOCK_EXPR@[113; 115)
|
||||
BLOCK@[113; 115)
|
||||
L_CURLY@[113; 114) "{"
|
||||
R_CURLY@[114; 115) "}"
|
||||
|
@ -10,6 +10,7 @@ SOURCE_FILE@[0; 18)
|
||||
L_PAREN@[12; 13) "("
|
||||
R_PAREN@[13; 14) ")"
|
||||
WHITESPACE@[14; 15) " "
|
||||
BLOCK_EXPR@[15; 17)
|
||||
BLOCK@[15; 17)
|
||||
L_CURLY@[15; 16) "{"
|
||||
R_CURLY@[16; 17) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 111)
|
||||
BLOCK@[10; 111)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 83)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 82)
|
||||
BLOCK@[9; 82)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 112)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 111)
|
||||
BLOCK@[9; 111)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 70)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 11)
|
||||
BLOCK@[9; 11)
|
||||
L_CURLY@[9; 10) "{"
|
||||
R_CURLY@[10; 11) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 107)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 106)
|
||||
BLOCK@[9; 106)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
@ -19,6 +20,7 @@ SOURCE_FILE@[0; 107)
|
||||
LITERAL@[18; 22)
|
||||
TRUE_KW@[18; 22) "true"
|
||||
WHITESPACE@[22; 23) " "
|
||||
BLOCK_EXPR@[23; 25)
|
||||
BLOCK@[23; 25)
|
||||
L_CURLY@[23; 24) "{"
|
||||
R_CURLY@[24; 25) "}"
|
||||
@ -32,12 +34,14 @@ SOURCE_FILE@[0; 107)
|
||||
LITERAL@[34; 38)
|
||||
TRUE_KW@[34; 38) "true"
|
||||
WHITESPACE@[38; 39) " "
|
||||
BLOCK_EXPR@[39; 41)
|
||||
BLOCK@[39; 41)
|
||||
L_CURLY@[39; 40) "{"
|
||||
R_CURLY@[40; 41) "}"
|
||||
WHITESPACE@[41; 42) " "
|
||||
ELSE_KW@[42; 46) "else"
|
||||
WHITESPACE@[46; 47) " "
|
||||
BLOCK_EXPR@[47; 49)
|
||||
BLOCK@[47; 49)
|
||||
L_CURLY@[47; 48) "{"
|
||||
R_CURLY@[48; 49) "}"
|
||||
@ -51,6 +55,7 @@ SOURCE_FILE@[0; 107)
|
||||
LITERAL@[58; 62)
|
||||
TRUE_KW@[58; 62) "true"
|
||||
WHITESPACE@[62; 63) " "
|
||||
BLOCK_EXPR@[63; 65)
|
||||
BLOCK@[63; 65)
|
||||
L_CURLY@[63; 64) "{"
|
||||
R_CURLY@[64; 65) "}"
|
||||
@ -64,12 +69,14 @@ SOURCE_FILE@[0; 107)
|
||||
LITERAL@[74; 79)
|
||||
FALSE_KW@[74; 79) "false"
|
||||
WHITESPACE@[79; 80) " "
|
||||
BLOCK_EXPR@[80; 82)
|
||||
BLOCK@[80; 82)
|
||||
L_CURLY@[80; 81) "{"
|
||||
R_CURLY@[81; 82) "}"
|
||||
WHITESPACE@[82; 83) " "
|
||||
ELSE_KW@[83; 87) "else"
|
||||
WHITESPACE@[87; 88) " "
|
||||
BLOCK_EXPR@[88; 90)
|
||||
BLOCK@[88; 90)
|
||||
L_CURLY@[88; 89) "{"
|
||||
R_CURLY@[89; 90) "}"
|
||||
@ -86,6 +93,7 @@ SOURCE_FILE@[0; 107)
|
||||
NAME_REF@[99; 100)
|
||||
IDENT@[99; 100) "S"
|
||||
WHITESPACE@[100; 101) " "
|
||||
BLOCK_EXPR@[101; 103)
|
||||
BLOCK@[101; 103)
|
||||
L_CURLY@[101; 102) "{"
|
||||
R_CURLY@[102; 103) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 167)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 166)
|
||||
BLOCK@[9; 166)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 46)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 45)
|
||||
BLOCK@[9; 45)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 47)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 46)
|
||||
BLOCK@[9; 46)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 40)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 39)
|
||||
BLOCK@[9; 39)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 84)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 83)
|
||||
BLOCK@[9; 83)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 65)
|
||||
L_PAREN@[4; 5) "("
|
||||
R_PAREN@[5; 6) ")"
|
||||
WHITESPACE@[6; 7) " "
|
||||
BLOCK_EXPR@[7; 9)
|
||||
BLOCK@[7; 9)
|
||||
L_CURLY@[7; 8) "{"
|
||||
R_CURLY@[8; 9) "}"
|
||||
@ -21,6 +22,7 @@ SOURCE_FILE@[0; 65)
|
||||
L_PAREN@[14; 15) "("
|
||||
R_PAREN@[15; 16) ")"
|
||||
WHITESPACE@[16; 17) " "
|
||||
BLOCK_EXPR@[17; 31)
|
||||
BLOCK@[17; 31)
|
||||
L_CURLY@[17; 18) "{"
|
||||
WHITESPACE@[18; 19) " "
|
||||
@ -47,6 +49,7 @@ SOURCE_FILE@[0; 65)
|
||||
L_PAREN@[36; 37) "("
|
||||
R_PAREN@[37; 38) ")"
|
||||
WHITESPACE@[38; 39) " "
|
||||
BLOCK_EXPR@[39; 48)
|
||||
BLOCK@[39; 48)
|
||||
L_CURLY@[39; 40) "{"
|
||||
WHITESPACE@[40; 41) " "
|
||||
@ -71,6 +74,7 @@ SOURCE_FILE@[0; 65)
|
||||
L_PAREN@[53; 54) "("
|
||||
R_PAREN@[54; 55) ")"
|
||||
WHITESPACE@[55; 56) " "
|
||||
BLOCK_EXPR@[56; 64)
|
||||
BLOCK@[56; 64)
|
||||
L_CURLY@[56; 57) "{"
|
||||
WHITESPACE@[57; 58) " "
|
||||
|
@ -33,6 +33,7 @@ SOURCE_FILE@[0; 29)
|
||||
NAME_REF@[21; 25)
|
||||
IDENT@[21; 25) "Copy"
|
||||
WHITESPACE@[25; 26) " "
|
||||
BLOCK_EXPR@[26; 28)
|
||||
BLOCK@[26; 28)
|
||||
L_CURLY@[26; 27) "{"
|
||||
R_CURLY@[27; 28) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 21)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 20)
|
||||
BLOCK@[9; 20)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 26)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 25)
|
||||
BLOCK@[9; 25)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 11) " "
|
||||
|
@ -88,6 +88,7 @@ SOURCE_FILE@[0; 200)
|
||||
NAME_REF@[68; 76)
|
||||
IDENT@[68; 76) "Iterator"
|
||||
WHITESPACE@[76; 77) " "
|
||||
BLOCK_EXPR@[77; 79)
|
||||
BLOCK@[77; 79)
|
||||
L_CURLY@[77; 78) "{"
|
||||
R_CURLY@[78; 79) "}"
|
||||
@ -153,6 +154,7 @@ SOURCE_FILE@[0; 200)
|
||||
NAME_REF@[123; 131)
|
||||
IDENT@[123; 131) "Iterator"
|
||||
WHITESPACE@[131; 132) " "
|
||||
BLOCK_EXPR@[132; 134)
|
||||
BLOCK@[132; 134)
|
||||
L_CURLY@[132; 133) "{"
|
||||
R_CURLY@[133; 134) "}"
|
||||
@ -234,6 +236,7 @@ SOURCE_FILE@[0; 200)
|
||||
NAME_REF@[188; 196)
|
||||
IDENT@[188; 196) "Iterator"
|
||||
WHITESPACE@[196; 197) " "
|
||||
BLOCK_EXPR@[197; 199)
|
||||
BLOCK@[197; 199)
|
||||
L_CURLY@[197; 198) "{"
|
||||
R_CURLY@[198; 199) "}"
|
||||
|
@ -8,6 +8,7 @@ SOURCE_FILE@[0; 52)
|
||||
L_PAREN@[6; 7) "("
|
||||
R_PAREN@[7; 8) ")"
|
||||
WHITESPACE@[8; 9) " "
|
||||
BLOCK_EXPR@[9; 51)
|
||||
BLOCK@[9; 51)
|
||||
L_CURLY@[9; 10) "{"
|
||||
WHITESPACE@[10; 15) "\n "
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user