File 0118-Add-support-for-.-in-shell_docs_test.patch of Package erlang
From 286ed1df759a0800f2f81c1feb75716bbdb72200 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lukas=20Backstr=C3=B6m?= <lukas@erlang.org>
Date: Wed, 11 Jun 2025 16:29:20 +0200
Subject: [PATCH] Add support for ... in shell_docs_test
---
lib/stdlib/src/shell_docs_test.erl | 31 ++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/lib/stdlib/src/shell_docs_test.erl b/lib/stdlib/src/shell_docs_test.erl
index c24bf1f8b7..c9c746f7df 100644
--- a/lib/stdlib/src/shell_docs_test.erl
+++ b/lib/stdlib/src/shell_docs_test.erl
@@ -137,6 +137,15 @@ hello
#{ a => b }
```
+## Matching of ...:
+
+```
+1> lists:seq(1,100).
+[1, 2, 3 | ...]
+2> #{ a => b }.
+#{ a => ... }
+```
+
## Edge cases:
```
@@ -192,7 +201,8 @@ module(#docs_v1{ docs = Docs, module_doc = MD }, Bindings) ->
N ->
error({N,errors})
end.
-
+print_error({{Name,Arity},{Message,Line,Context}}) ->
+ io:format("~p/~p:~p: ~ts~n~ts~n", [Name,Arity,Line,Context,Message]);
print_error({{Name,Arity},{Message,Context}}) ->
io:format("~p/~p: ~ts~n~ts~n", [Name,Arity,Context,Message]).
@@ -346,17 +356,26 @@ parse(Cmd0, _Test, _Match) ->
Cmd = lists:flatten(Cmd0),
maybe
{ok, T, _} ?= erl_scan:string(Cmd),
- {ok, Ast} ?= inspect(erl_parse:parse_exprs(T)),
+ RewrittenToks = rewrite_tokens(T),
+ {ok, Ast} ?= inspect(erl_parse:parse_exprs(RewrittenToks)),
Ast
else
- {error, {_Line,Mod,Reason}, _} ->
+ {error, {Line,Mod,Reason}, _} ->
Message = Mod:format_error(Reason),
- throw({error,{Message,Cmd}});
- {error, {_Line,Mod,Reason}} ->
+ throw({error,{Message,Line,Cmd}});
+ {error, {Line,Mod,Reason}} ->
Message = Mod:format_error(Reason),
- throw({error,{Message,Cmd}})
+ throw({error,{Message,Line,Cmd}})
end.
+%% We rewrite ... to _ to match shell syntax better
+rewrite_tokens([{'...', L} | T]) ->
+ rewrite_tokens([{var, L, '_'} | T]);
+rewrite_tokens([H | T]) ->
+ [H | rewrite_tokens(T)];
+rewrite_tokens([]) ->
+ [].
+
format_exception(Class, Reason, [{M,F,A,Info0},Item|_]) ->
Info = lists:keydelete(line, 1, Info0),
Stacktrace = [{M,F,A,Info},Item],
--
2.43.0