Skip to content

Commit 9cd5f58

Browse files
committed
feat(error): impproved error messages for missing members
1 parent 1252bab commit 9cd5f58

12 files changed

+19
-16
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- fix(lsp): `lithia lsp tcp` didn't work as expected
66
- fix(cli): correctly handle running script and repl
77
- feat(stdlib): `os.args` returns the arguments passed to the program
8+
- feat(error): impproved error messages for missing members
89

910
## v0.0.18
1011

runtime/prelude-anonymous-function.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (f PreludeAnonymousFunction) Lookup(member string) (Evaluatable, *RuntimeEr
3333
case "arity":
3434
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
3535
default:
36-
return nil, NewRuntimeErrorf("no such member: %s", member)
36+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
3737
}
3838
}
3939

runtime/prelude-curried-callable.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func (f PreludeCurriedCallable) Lookup(member string) (Evaluatable, *RuntimeErro
2828
case "arity":
2929
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
3030
default:
31-
return nil, NewRuntimeErrorf("no such member: %s", member)
31+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
3232
}
3333
}
3434

runtime/prelude-dict.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ func (rv PreludeDict) Lookup(member string) (Evaluatable, *RuntimeError) {
149149
dataList, err := rv.context.environment.MakeList(values)
150150
return NewConstantRuntimeValue(dataList), err
151151
default:
152-
return nil, NewRuntimeErrorf("no such member: %s", member)
152+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, rv.RuntimeType().String())
153153
}
154154
}
155155

runtime/prelude-extern-function.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (f PreludeExternFunction) Lookup(member string) (Evaluatable, *RuntimeError
3434
case "arity":
3535
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
3636
default:
37-
return nil, NewRuntimeErrorf("no such member: %s", member)
37+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
3838
}
3939
}
4040

runtime/prelude-extern-type-method.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (f PreludeExternTypeMethod) Lookup(member string) (Evaluatable, *RuntimeErr
3737
case "arity":
3838
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
3939
default:
40-
return nil, NewRuntimeErrorf("no such member: %s", member)
40+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
4141
}
4242
}
4343

runtime/prelude-func-decl.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (f PreludeFuncDecl) Lookup(member string) (Evaluatable, *RuntimeError) {
4848
case "arity":
4949
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
5050
default:
51-
return nil, NewRuntimeErrorf("no such member: %s", member)
51+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
5252
}
5353
}
5454

runtime/prelude-func-expr.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (f PreludeFuncExpr) Lookup(member string) (Evaluatable, *RuntimeError) {
4343
case "arity":
4444
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
4545
default:
46-
return nil, NewRuntimeErrorf("no such member: %s", member)
46+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, f.RuntimeType().String())
4747
}
4848
}
4949

runtime/prelude-string.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ func (s PreludeString) EagerEvaluate() *RuntimeError {
1717
return nil
1818
}
1919

20-
func (i PreludeString) Lookup(member string) (Evaluatable, *RuntimeError) {
20+
func (s PreludeString) Lookup(member string) (Evaluatable, *RuntimeError) {
2121
switch member {
2222
case "length":
23-
return NewConstantRuntimeValue(PreludeInt(len(i))), nil
23+
return NewConstantRuntimeValue(PreludeInt(len(s))), nil
2424
case "append":
2525
return NewConstantRuntimeValue(MakeAnonymousFunction(
2626
"append",
@@ -30,9 +30,9 @@ func (i PreludeString) Lookup(member string) (Evaluatable, *RuntimeError) {
3030
if err != nil {
3131
return nil, err
3232
}
33-
return PreludeString(i) + PreludeString(value.String()), nil
33+
return PreludeString(s) + PreludeString(value.String()), nil
3434
})), nil
3535
default:
36-
return nil, NewRuntimeErrorf("no such member: %s", member)
36+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, s.RuntimeType().String())
3737
}
3838
}

runtime/prelude-type-switch-expr.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ func MakePreludeTypeSwitchExpr(context *InterpreterContext, decl ast.ExprTypeSwi
2727
return PreludeTypeSwitchExpr{decl, context, MakeEvaluatableExpr(context, decl.Type), caseValue}
2828
}
2929

30-
func (f PreludeTypeSwitchExpr) Lookup(member string) (Evaluatable, *RuntimeError) {
30+
func (t PreludeTypeSwitchExpr) Lookup(member string) (Evaluatable, *RuntimeError) {
3131
switch member {
3232
case "arity":
33-
return NewConstantRuntimeValue(PreludeInt(f.Arity())), nil
33+
return NewConstantRuntimeValue(PreludeInt(t.Arity())), nil
3434
default:
35-
return nil, NewRuntimeErrorf("no such member: %s", member)
35+
return nil, NewRuntimeErrorf("no such member: %s for %s", member, t.RuntimeType().String())
3636
}
3737
}
3838

world/osworld.go

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ func New() World {
99
Stderr: os.Stderr,
1010
FS: OSFS{},
1111
Env: OSEnv{},
12+
Args: os.Args,
1213
}
1314
}

world/world.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ type World struct {
1010
Stdout io.Writer
1111
Stderr io.Writer
1212

13-
FS WorldFS
14-
Env WorldEnv
13+
FS WorldFS
14+
Env WorldEnv
15+
Args []string
1516
}
1617

1718
type WorldFS interface {

0 commit comments

Comments
 (0)