lang: ast: Add scope feedback for classes
We did this elsewhere for functions, let's add classes too.
This commit is contained in:
@@ -6828,6 +6828,9 @@ func (obj *StmtInclude) SetScope(scope *interfaces.Scope) error {
|
|||||||
|
|
||||||
stmt, exists := scope.Classes[obj.Name]
|
stmt, exists := scope.Classes[obj.Name]
|
||||||
if !exists {
|
if !exists {
|
||||||
|
if obj.data.Debug || true { // TODO: leave this on permanently?
|
||||||
|
classScopeFeedback(scope, obj.data.Logf)
|
||||||
|
}
|
||||||
err := fmt.Errorf("class `%s` does not exist in this scope", obj.Name)
|
err := fmt.Errorf("class `%s` does not exist in this scope", obj.Name)
|
||||||
return highlightHelper(obj, obj.data.Logf, err)
|
return highlightHelper(obj, obj.data.Logf, err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -562,6 +562,21 @@ func lambdaScopeFeedback(scope *interfaces.Scope, logf func(format string, v ...
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// classScopeFeedback logs some messages about what is actually in scope so that
|
||||||
|
// the user gets a hint about what's going on. This is useful for catching bugs
|
||||||
|
// in our programming or in user code!
|
||||||
|
func classScopeFeedback(scope *interfaces.Scope, logf func(format string, v ...interface{})) {
|
||||||
|
logf("classes in scope:")
|
||||||
|
names := []string{}
|
||||||
|
for name := range scope.Classes {
|
||||||
|
names = append(names, name)
|
||||||
|
}
|
||||||
|
sort.Strings(names)
|
||||||
|
for _, name := range names {
|
||||||
|
logf("class %s", name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// highlightHelper give the user better file/line number feedback.
|
// highlightHelper give the user better file/line number feedback.
|
||||||
func highlightHelper(node interfaces.Node, logf func(format string, v ...interface{}), err error) error {
|
func highlightHelper(node interfaces.Node, logf func(format string, v ...interface{}), err error) error {
|
||||||
displayer, ok := node.(interfaces.TextDisplayer)
|
displayer, ok := node.(interfaces.TextDisplayer)
|
||||||
|
|||||||
Reference in New Issue
Block a user