lisette-semantics 0.3.3

Little language inspired by Rust that compiles to Go
Documentation
use crate::passes::walk::NodeCtx;
use syntax::ast::{Expression, SelectArmPattern, Span};

use super::helpers::span_text;

pub fn check_single_arm_select(expression: &Expression, ctx: &NodeCtx) {
    let Expression::Select { arms, span, .. } = expression else {
        return;
    };

    let [arm] = arms.as_slice() else {
        return;
    };

    let SelectArmPattern::MatchReceive {
        receive_expression, ..
    } = &arm.pattern
    else {
        return;
    };

    let Some(receive_text) = span_text(ctx.source, receive_expression) else {
        return;
    };

    let select_keyword_span = Span::new(span.file_id, span.byte_offset, 6);
    ctx.sink.push(diagnostics::lint::single_arm_select(
        &select_keyword_span,
        receive_text,
    ));
}