Skip to content

Commit 2cd9076

Browse files
committed
Hide clean state internals behind queries
1 parent a7d91c3 commit 2cd9076

2 files changed

Lines changed: 27 additions & 7 deletions

File tree

src/checks/body.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ fn check_stmt_semantics(
6767
Stmt::Let(stmt) => {
6868
if stmt.kind == LetKind::Local
6969
&& let Some(Expr::Ident(name, span)) = &stmt.value
70-
&& state.managed.contains(name)
70+
&& state.is_managed(name)
7171
{
7272
analyzer.diagnostics.push(
7373
Diagnostic::error(
@@ -249,7 +249,7 @@ fn check_moved_uses_in_stmt(analyzer: &mut Analyzer<'_>, statement: &Stmt, state
249249
let mut uses = Vec::new();
250250
collect_stmt_idents(statement, &mut uses);
251251
for (name, span) in uses {
252-
if let Some(move_span) = state.moved.get(&name) {
252+
if let Some(move_span) = state.move_span(&name) {
253253
analyzer.diagnostics.push(
254254
Diagnostic::error(
255255
code::USE_AFTER_MANAGE,
@@ -275,7 +275,7 @@ fn check_managed_closure_captures(analyzer: &mut Analyzer<'_>, body: &Block, sta
275275
let mut uses = Vec::new();
276276
collect_block_idents(body, &mut uses);
277277
for (name, span) in uses {
278-
if state.locals.contains(&name) {
278+
if state.is_local(&name) {
279279
analyzer.diagnostics.push(
280280
Diagnostic::error(
281281
code::LOCAL_CAPTURED_BY_MANAGED_CLOSURE,
@@ -517,11 +517,11 @@ fn check_fresh_return(
517517
state: &BodyState,
518518
) {
519519
match value {
520-
Expr::Ident(name, span) if state.managed.contains(name) => {
520+
Expr::Ident(name, span) if state.is_managed(name) => {
521521
fresh_return_diagnostic(analyzer, function, name, span.clone());
522522
}
523-
Expr::Ident(name, span) if state.locals.contains(name) => {
524-
if !state.clean_locals.contains(name) {
523+
Expr::Ident(name, span) if state.is_local(name) => {
524+
if !state.is_clean_local(name) {
525525
fresh_return_diagnostic(analyzer, function, name, span.clone());
526526
}
527527
}
@@ -643,7 +643,7 @@ fn is_struct_type(analyzer: &Analyzer<'_>, name: &str) -> bool {
643643

644644
fn infer_expr_type(analyzer: &Analyzer<'_>, expr: &Expr, state: &BodyState) -> Option<String> {
645645
match expr {
646-
Expr::Ident(name, _) => state.value_types.get(name).cloned(),
646+
Expr::Ident(name, _) => state.value_type(name).map(str::to_string),
647647
Expr::Effect { value, .. } | Expr::Manage { value, .. } => {
648648
infer_expr_type(analyzer, value, state)
649649
}

src/checks/local.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,26 @@ impl BodyState {
4949
self.clean_locals.remove(name);
5050
}
5151

52+
pub(crate) fn is_local(&self, name: &str) -> bool {
53+
self.locals.contains(name)
54+
}
55+
56+
pub(crate) fn is_managed(&self, name: &str) -> bool {
57+
self.managed.contains(name)
58+
}
59+
60+
pub(crate) fn is_clean_local(&self, name: &str) -> bool {
61+
self.clean_locals.contains(name)
62+
}
63+
64+
pub(crate) fn move_span(&self, name: &str) -> Option<&Span> {
65+
self.moved.get(name)
66+
}
67+
68+
pub(crate) fn value_type(&self, name: &str) -> Option<&str> {
69+
self.value_types.get(name).map(String::as_str)
70+
}
71+
5272
pub(crate) fn apply_move_events(&mut self, events: &[HirEffectEvent]) {
5373
for event in events {
5474
if !matches!(

0 commit comments

Comments
 (0)