summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/foundations/module.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-02-03 17:04:54 +0100
committerGitHub <noreply@github.com>2025-02-03 16:04:54 +0000
commiteee903b0f8d5c0dfda3539888d7473c6163841b0 (patch)
treed92b2f4565b0153c03cbb63575e2edd4e911e853 /crates/typst-library/src/foundations/module.rs
parent12dbb012b19a29612fc863c558901200b4013f5d (diff)
Refactor `Scope` (#5797)
Diffstat (limited to 'crates/typst-library/src/foundations/module.rs')
-rw-r--r--crates/typst-library/src/foundations/module.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/crates/typst-library/src/foundations/module.rs b/crates/typst-library/src/foundations/module.rs
index 3ee59c10..3259c17e 100644
--- a/crates/typst-library/src/foundations/module.rs
+++ b/crates/typst-library/src/foundations/module.rs
@@ -4,7 +4,7 @@ use std::sync::Arc;
use ecow::{eco_format, EcoString};
use typst_syntax::FileId;
-use crate::diag::StrResult;
+use crate::diag::{bail, StrResult};
use crate::foundations::{repr, ty, Content, Scope, Value};
/// An module of definitions.
@@ -118,11 +118,14 @@ impl Module {
}
/// Try to access a definition in the module.
- pub fn field(&self, name: &str) -> StrResult<&Value> {
- self.scope().get(name).ok_or_else(|| match &self.name {
- Some(module) => eco_format!("module `{module}` does not contain `{name}`"),
- None => eco_format!("module does not contain `{name}`"),
- })
+ pub fn field(&self, field: &str) -> StrResult<&Value> {
+ match self.scope().get(field) {
+ Some(binding) => Ok(binding.read()),
+ None => match &self.name {
+ Some(name) => bail!("module `{name}` does not contain `{field}`"),
+ None => bail!("module does not contain `{field}`"),
+ },
+ }
}
/// Extract the module's content.