commit 4b72bd743fd8110d1d39e1b2db958264e872d255
parent 3ea3291922ce19b3376893be2422bda85d2eba02
Author: Lou Woell <lou.woell@posteo.de>
Date:   Sat, 13 Sep 2025 02:13:37 +0200

[list-symbols] handle some errors

Diffstat:
Mcmd/harehelper/list_symbols.ha | 22+++++++++++++++++++---
Mcmd/harehelper/locate.ha | 7++++++-
2 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/cmd/harehelper/list_symbols.ha b/cmd/harehelper/list_symbols.ha @@ -13,6 +13,7 @@ // this program. If not, see <https://www.gnu.org/licenses/>. use fs; +use fmt; use getopt; use hare::ast; use hare::module; @@ -20,7 +21,12 @@ use hare::parse; fn list (cmd: getopt::command, ctx: *module::context) void = { - let id = parse::identstr(cmd.args[0])!; + let id = match (parse::identstr(cmd.args[0])) { + case let e: parse::error => + fmt::fatal(parse::strerror(e)); + case let id: ast::ident => + yield id; + }; defer ast::ident_free(id); let list = list_symbols(ctx, id); @@ -33,12 +39,22 @@ fn list (cmd: getopt::command, ctx: *module::context) void = { fn list_symbols (ctx: *module::context, id: ast::ident) []ast::ident = { - let (path, src) = module::find(ctx, id)!; + let (path, src) = match(module::find(ctx, id)){ + case let e: module::error => + fmt::fatal(module::strerror(e)); + case let res: (str, module::srcset) => + yield res; + }; let res: []ast::ident = []; for (let s .. src.ha) { - let decls = scan(s)!; + let decls = match (scan(s)) { + case let e: parse::error => + fmt::fatal(parse::strerror(e)); + case let d: []ast::decl => + yield d; + }; defer decls_finish(decls); for (let d .. decls) { diff --git a/cmd/harehelper/locate.ha b/cmd/harehelper/locate.ha @@ -82,7 +82,12 @@ fn locate_symbol ( id = ident_last(id); for (let s .. src.ha) { - let decls = scan(s)!; + let decls = match (scan(s)) { + case let e: parse::error => + fmt::fatal(parse::strerror(e)); + case let d: []ast::decl => + yield d; + }; defer decls_finish(decls); for (let decl .. decls) {