summaryrefslogtreecommitdiff
path: root/src/eval/scope.rs
diff options
context:
space:
mode:
authorMarmare314 <49279081+Marmare314@users.noreply.github.com>2023-04-24 19:08:07 +0200
committerGitHub <noreply@github.com>2023-04-24 19:08:07 +0200
commit12129f01707a3389ef90a4c78a872e1c7897a752 (patch)
treecaaab7a6797c35be99c7b9e613e57c003b3ee057 /src/eval/scope.rs
parent83c11f1ee4ab7479af6ee3ea3937be48b43eed60 (diff)
hint for unknown variable containing dash (#924)
Diffstat (limited to 'src/eval/scope.rs')
-rw-r--r--src/eval/scope.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/eval/scope.rs b/src/eval/scope.rs
index 76633bf2..83d1703e 100644
--- a/src/eval/scope.rs
+++ b/src/eval/scope.rs
@@ -42,7 +42,7 @@ impl<'a> Scopes<'a> {
.chain(self.scopes.iter().rev())
.chain(self.base.map(|base| base.global.scope()))
.find_map(|scope| scope.get(var))
- .ok_or_else(|| eco_format!("unknown variable: {}", var))
+ .ok_or_else(|| unknown_variable(var))
}
/// Try to access a variable immutably in math.
@@ -62,12 +62,22 @@ impl<'a> Scopes<'a> {
.ok_or_else(|| {
match self.base.and_then(|base| base.global.scope().get(var)) {
Some(_) => eco_format!("cannot mutate a constant: {}", var),
- _ => eco_format!("unknown variable: {}", var),
+ _ => unknown_variable(var),
}
})?
}
}
+/// The error message when a variable is not found.
+#[cold]
+fn unknown_variable(var: &str) -> EcoString {
+ if var.contains('-') {
+ eco_format!("unknown variable: {} – if you meant to use subtraction, try adding spaces around the minus sign.", var)
+ } else {
+ eco_format!("unknown variable: {}", var)
+ }
+}
+
/// A map from binding names to values.
#[derive(Default, Clone, Hash)]
pub struct Scope(BTreeMap<EcoString, Slot>, bool);