forked from M-Labs/nac3
clippy again
This commit is contained in:
parent
2b2e220723
commit
67963fc21f
@ -111,12 +111,12 @@ fn infer_tuple<'b: 'a, 'a>(ctx: &mut InferenceContext<'a>, elements: &'b [Expres
|
||||
}
|
||||
}
|
||||
|
||||
fn infer_attribute<'b: 'a, 'a>(
|
||||
fn infer_attribute<'a>(
|
||||
ctx: &mut InferenceContext<'a>,
|
||||
value: &'a Expression,
|
||||
name: &String,
|
||||
name: &str,
|
||||
) -> ParserResult {
|
||||
let value = infer_expr(ctx, value)?.ok_or("no value".to_string())?;
|
||||
let value = infer_expr(ctx, value)?.ok_or_else(|| "no value".to_string())?;
|
||||
if let TypeVariable(id) = value.as_ref() {
|
||||
let v = ctx.get_variable_def(*id);
|
||||
if v.bound.is_empty() {
|
||||
@ -124,12 +124,12 @@ fn infer_attribute<'b: 'a, 'a>(
|
||||
}
|
||||
let ty = v.bound[0]
|
||||
.get_base(ctx)
|
||||
.and_then(|v| v.fields.get(name.as_str()));
|
||||
.and_then(|v| v.fields.get(name));
|
||||
if ty.is_none() {
|
||||
return Err("unknown field".into());
|
||||
}
|
||||
for x in v.bound[1..].iter() {
|
||||
let ty1 = x.get_base(ctx).and_then(|v| v.fields.get(name.as_str()));
|
||||
let ty1 = x.get_base(ctx).and_then(|v| v.fields.get(name));
|
||||
if ty1 != ty {
|
||||
return Err("unknown field (type mismatch between variants)".into());
|
||||
}
|
||||
@ -138,7 +138,7 @@ fn infer_attribute<'b: 'a, 'a>(
|
||||
}
|
||||
|
||||
match value.get_base(ctx) {
|
||||
Some(b) => match b.fields.get(name.as_str()) {
|
||||
Some(b) => match b.fields.get(name) {
|
||||
Some(t) => Ok(Some(t.clone())),
|
||||
None => Err("no such field".into()),
|
||||
},
|
||||
@ -146,13 +146,13 @@ fn infer_attribute<'b: 'a, 'a>(
|
||||
}
|
||||
}
|
||||
|
||||
fn infer_bool_ops<'b: 'a, 'a>(
|
||||
fn infer_bool_ops<'a>(
|
||||
ctx: &mut InferenceContext<'a>,
|
||||
values: &'a [Expression],
|
||||
) -> ParserResult {
|
||||
assert_eq!(values.len(), 2);
|
||||
let left = infer_expr(ctx, &values[0])?.ok_or("no value".to_string())?;
|
||||
let right = infer_expr(ctx, &values[1])?.ok_or("no value".to_string())?;
|
||||
let left = infer_expr(ctx, &values[0])?.ok_or_else(|| "no value".to_string())?;
|
||||
let right = infer_expr(ctx, &values[1])?.ok_or_else(|| "no value".to_string())?;
|
||||
|
||||
let b = ctx.get_primitive(BOOL_TYPE);
|
||||
if left == b && right == b {
|
||||
@ -168,8 +168,8 @@ fn infer_bin_ops<'b: 'a, 'a>(
|
||||
left: &'b Expression,
|
||||
right: &'b Expression,
|
||||
) -> ParserResult {
|
||||
let left = infer_expr(ctx, left)?.ok_or("no value".to_string())?;
|
||||
let right = infer_expr(ctx, right)?.ok_or("no value".to_string())?;
|
||||
let left = infer_expr(ctx, left)?.ok_or_else(|| "no value".to_string())?;
|
||||
let right = infer_expr(ctx, right)?.ok_or_else(|| "no value".to_string())?;
|
||||
let fun = binop_name(op);
|
||||
resolve_call(ctx, Some(left), fun, &[right])
|
||||
}
|
||||
@ -179,7 +179,7 @@ fn infer_unary_ops<'b: 'a, 'a>(
|
||||
op: &UnaryOperator,
|
||||
obj: &'b Expression,
|
||||
) -> ParserResult {
|
||||
let ty = infer_expr(ctx, obj)?.ok_or("no value".to_string())?;
|
||||
let ty = infer_expr(ctx, obj)?.ok_or_else(|| "no value".to_string())?;
|
||||
if let UnaryOperator::Not = op {
|
||||
if ty == ctx.get_primitive(BOOL_TYPE) {
|
||||
Ok(Some(ty))
|
||||
@ -208,7 +208,7 @@ fn infer_compare<'b: 'a, 'a>(
|
||||
let right = &types[1..];
|
||||
|
||||
for ((a, b), op) in left.iter().zip(right.iter()).zip(ops.iter()) {
|
||||
let fun = comparison_name(op).ok_or("unsupported comparison".to_string())?;
|
||||
let fun = comparison_name(op).ok_or_else(|| "unsupported comparison".to_string())?;
|
||||
let ty = resolve_call(ctx, Some(a.clone()), fun, &[b.clone()])?;
|
||||
if ty.is_none() || ty.unwrap() != boolean {
|
||||
return Err("comparison result must be boolean".into());
|
||||
@ -232,7 +232,7 @@ fn infer_call<'b: 'a, 'a>(
|
||||
let (obj, fun) = match &function.node {
|
||||
ExpressionType::Identifier { name } => (None, name),
|
||||
ExpressionType::Attribute { value, name } => (
|
||||
Some(infer_expr(ctx, &value)?.ok_or("no value".to_string())?),
|
||||
Some(infer_expr(ctx, &value)?.ok_or_else(|| "no value".to_string())?),
|
||||
name,
|
||||
),
|
||||
_ => return Err("not supported".into()),
|
||||
@ -245,7 +245,7 @@ fn infer_subscript<'b: 'a, 'a>(
|
||||
a: &'b Expression,
|
||||
b: &'b Expression,
|
||||
) -> ParserResult {
|
||||
let a = infer_expr(ctx, a)?.ok_or("no value".to_string())?;
|
||||
let a = infer_expr(ctx, a)?.ok_or_else(|| "no value".to_string())?;
|
||||
let t = if let ParametricType(LIST_TYPE, ls) = a.as_ref() {
|
||||
ls[0].clone()
|
||||
} else {
|
||||
@ -265,7 +265,7 @@ fn infer_subscript<'b: 'a, 'a>(
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
let types = types?.ok_or("slice must have type".to_string())?;
|
||||
let types = types?.ok_or_else(|| "slice must have type".to_string())?;
|
||||
if types.iter().all(|v| v == &int32) {
|
||||
Ok(Some(a))
|
||||
} else {
|
||||
@ -273,7 +273,7 @@ fn infer_subscript<'b: 'a, 'a>(
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
let b = infer_expr(ctx, b)?.ok_or("no value".to_string())?;
|
||||
let b = infer_expr(ctx, b)?.ok_or_else(|| "no value".to_string())?;
|
||||
if b == ctx.get_primitive(INT32_TYPE) {
|
||||
Ok(Some(t))
|
||||
} else {
|
||||
@ -289,7 +289,7 @@ fn infer_if_expr<'b: 'a, 'a>(
|
||||
body: &'b Expression,
|
||||
orelse: &'b Expression,
|
||||
) -> ParserResult {
|
||||
let test = infer_expr(ctx, test)?.ok_or("no value".to_string())?;
|
||||
let test = infer_expr(ctx, test)?.ok_or_else(|| "no value".to_string())?;
|
||||
if test != ctx.get_primitive(BOOL_TYPE) {
|
||||
return Err("test should be bool".into());
|
||||
}
|
||||
@ -346,7 +346,7 @@ fn infer_list_comprehension<'b: 'a, 'a>(
|
||||
return Err("async is not supported".into());
|
||||
}
|
||||
|
||||
let iter = infer_expr(ctx, &comprehension.iter)?.ok_or("no value".to_string())?;
|
||||
let iter = infer_expr(ctx, &comprehension.iter)?.ok_or_else(|| "no value".to_string())?;
|
||||
if let ParametricType(LIST_TYPE, ls) = iter.as_ref() {
|
||||
ctx.with_scope(|ctx| {
|
||||
infer_simple_binding(ctx, &comprehension.target, ls[0].clone())?;
|
||||
@ -354,12 +354,12 @@ fn infer_list_comprehension<'b: 'a, 'a>(
|
||||
let boolean = ctx.get_primitive(BOOL_TYPE);
|
||||
for test in comprehension.ifs.iter() {
|
||||
let result =
|
||||
infer_expr(ctx, test)?.ok_or("no value in test".to_string())?;
|
||||
infer_expr(ctx, test)?.ok_or_else(|| "no value in test".to_string())?;
|
||||
if result != boolean {
|
||||
return Err("test must be bool".into());
|
||||
}
|
||||
}
|
||||
let result = infer_expr(ctx, element)?.ok_or("no value")?;
|
||||
let result = infer_expr(ctx, element)?.ok_or_else(|| "no value")?;
|
||||
Ok(Some(ParametricType(LIST_TYPE, vec![result]).into()))
|
||||
}).1
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user