diff --git a/crates/compiler/can/src/def.rs b/crates/compiler/can/src/def.rs index 1de110dab2..c761e41a95 100644 --- a/crates/compiler/can/src/def.rs +++ b/crates/compiler/can/src/def.rs @@ -3085,19 +3085,11 @@ fn to_pending_value_def<'a>( } } None => { - let exposed_values = exposed_ids - .ident_strs() - .filter(|(_, ident)| { - ident.starts_with(|c: char| c.is_lowercase()) - }) - .map(|(_, ident)| Lowercase::from(ident)) - .collect(); - env.problem(Problem::RuntimeError(RuntimeError::ValueNotExposed { module_name: module_name.clone(), ident, region: loc_name.region, - exposed_values, + exposed_values: exposed_ids.exposed_values(), })) } } diff --git a/crates/compiler/can/src/env.rs b/crates/compiler/can/src/env.rs index c49bfd1237..e2f6d2ee23 100644 --- a/crates/compiler/can/src/env.rs +++ b/crates/compiler/can/src/env.rs @@ -4,7 +4,7 @@ use crate::procedure::References; use crate::scope::Scope; use bumpalo::Bump; use roc_collections::{MutMap, VecSet}; -use roc_module::ident::{Ident, Lowercase, ModuleName}; +use roc_module::ident::{Ident, ModuleName}; use roc_module::symbol::{IdentIdsByModule, ModuleId, PQModuleName, PackageModuleIds, Symbol}; use roc_problem::can::{Problem, RuntimeError}; use roc_region::all::{Loc, Region}; @@ -170,24 +170,17 @@ impl<'a> Env<'a> { Ok(symbol) } - None => { - let exposed_values = exposed_ids - .ident_strs() - .filter(|(_, ident)| ident.starts_with(|c: char| c.is_lowercase())) - .map(|(_, ident)| Lowercase::from(ident)) - .collect(); - Err(RuntimeError::ValueNotExposed { - module_name: self - .qualified_module_ids - .get_name(module_id) - .expect("Module ID known, but not in the module IDs somehow") - .as_inner() - .clone(), - ident: Ident::from(ident), - region, - exposed_values, - }) - } + None => Err(RuntimeError::ValueNotExposed { + module_name: self + .qualified_module_ids + .get_name(module_id) + .expect("Module ID known, but not in the module IDs somehow") + .as_inner() + .clone(), + ident: Ident::from(ident), + region, + exposed_values: exposed_ids.exposed_values(), + }), }, _ => Err(self.module_exists_but_not_imported(scope, module_id, region)), } diff --git a/crates/compiler/module/src/symbol.rs b/crates/compiler/module/src/symbol.rs index dc0f67b9c3..6c6e4cd3da 100644 --- a/crates/compiler/module/src/symbol.rs +++ b/crates/compiler/module/src/symbol.rs @@ -1,4 +1,4 @@ -use crate::ident::{Ident, ModuleName}; +use crate::ident::{Ident, Lowercase, ModuleName}; use crate::module_err::{IdentIdNotFoundSnafu, ModuleIdNotFoundSnafu, ModuleResult}; use roc_collections::{SmallStringInterner, VecMap}; use roc_error_macros::internal_error; @@ -773,6 +773,13 @@ impl IdentIds { pub fn is_empty(&self) -> bool { self.interner.is_empty() } + + pub fn exposed_values(&self) -> Vec { + self.ident_strs() + .filter(|(_, ident)| ident.starts_with(|c: char| c.is_lowercase())) + .map(|(_, ident)| Lowercase::from(ident)) + .collect() + } } #[derive(Debug, Default, Clone)]