Commit Graph

736 Commits

Author SHA1 Message Date
Qi Xiao
d7fe04414b pkg/eval/evaltest: Import all builtin modules.
This removes the need for various "use-foo" setups for the standard library
modules - test code can just call "use foo" like normal Elvish code.
2024-02-01 14:46:37 +00:00
Qi Xiao
d4f11db983 pkg/eval/evaltest: Remove the old testing framework. 2024-01-30 20:53:56 +00:00
Qi Xiao
27495be1b9 Fixup for #1760.
- Use standard error types.

- Support float64 that stores an integer.

- Don't incur unnecessary overhead for int arguments.
2024-01-30 20:28:01 +00:00
Qi Xiao
183927cffc Convert tests to transcript tests. 2024-01-30 20:21:39 +00:00
Qi Xiao
747a34aef1 pkg/eval/evaltest: Generate .elvts files from non-transcript tests.
This is done implicitly in evaltest.Run. This commit will be reverted after the
.elvts files are generated and cleaned up.
2024-01-30 20:15:58 +00:00
Qi Xiao
0e2999dee8 Support using Elvish transcripts as tests.
- evaltest.TestTranscriptsInFS runs transcripts in .elv and .elvts files as
  tests.

- Extend the syntax of Elvish transcripts with headings and comments; the former
  is used to split a single .elvts file into multiple sessions.
2024-01-30 20:15:58 +00:00
Tw
e6380c1e0d support big num for base cmd
Signed-off-by: Tw <tw19881113@gmail.com>
2024-01-30 19:55:24 +00:00
Qi Xiao
fef5049716 pkg/eval: Simplify how exception tracebacks are written.
*Exception.Show used to work differently when the traceback contains one frame
vs more frames. Harmonize how they work, and consistent with how parse errors
and compilation errors are shown.
2024-01-16 12:50:59 +00:00
Qi Xiao
5775c8b3ed pkg/diag: Rework API and presentation of Context and Error.
- Change Context to export all its fields.

- Include end position in Context, and include it in Show.

- Remove the Type field from Error, and express it using an ErrorTag type
  parameter instead.

- Make {Pack Unpack}CognateErrors type-safe with the new ErrorTag mechanism, and
  rename them to just {Pack Unpack}Errors.
2024-01-16 11:04:52 +00:00
Qi Xiao
6e36058d0a pkg/tt: Improve API.
- Use reflection to derive function name.

- Take test cases as variadic arguments, instead of requiring them to be wrapped
  in a Table.

- Support naming test cases.

- Run test cases as subtests with t.Run.
2024-01-11 15:42:43 +00:00
Qi Xiao
d013121af6 Require Go >= 1.20, and bump CI environment versions.
Also:

- Fix new deprecations in Go 1.20.

- Remove the unused .gitlab-ci.yml.
2024-01-10 22:28:18 +00:00
Qi Xiao
9112eb1ab2 Simplify how .elv files are embedded for builtin documentation.
Instead of having each individual module embed their .elv files and collect all
of them in pkg/mods/doc, have a single embed.FS at pkg that includes everything,
and use that pkg/mods/doc.

Implement a function that extracts all module elvdocs, and put it in pkg/elvdoc.
2024-01-08 16:44:35 +00:00
Qi Xiao
791b4857e1 pkg/eval/evaltest: Fix the bytes output error message. 2024-01-08 15:44:14 +00:00
Qi Xiao
cf9ec15fa6 Implement os:chmod.
This supersedes #1730.
2024-01-03 22:02:57 +00:00
Qi Xiao
d86b61cac9 Fix broken links in d.elv files. 2024-01-02 19:38:14 +00:00
Qi Xiao
8e67588090 pkg/eval: Remove unused toFloat64. 2024-01-02 19:34:31 +00:00
Qi Xiao
7d38243540 Remove float64, and deprecate eawk from 0.20.0. 2024-01-02 15:11:38 +00:00
Qi Xiao
e4564688bf Rename eawk -> re:awk.
Also rename &posix to &sep-posix, and add &sep-longest.

The original eawk name is documented as deprecated but doesn't emit deprecation
warnings during compilation yet; this will be fixed in the next commit.
2024-01-02 15:07:37 +00:00
Olof Salberger
674740fbc6 Fix typo in comment 2023-10-14 09:09:34 +02:00
Olof Salberger
a274aa1676 Added real world test with docker image ls output 2023-10-14 08:43:36 +02:00
Olof Salberger
1b6477878e Add separator pattern to eawk
One of the biggest pain points of using elvish
as a shell in practice has been parsing output from
shell commands that return text.

Many CLIs are parseable by AWK. This commit
adds the AWK separator argument to eawk,
which should make it easier to parse the
output of many shell commands.
2023-10-13 00:50:10 +02:00
Qi Xiao
1c0cffbfed pkg/eval/vals/cmp.go: Use compareBuiltin for strings too. 2023-08-25 22:18:05 -04:00
Qi Xiao
a15f0f7d0a pkg/eval/vals: Test that structmaps are treated like maps by CmpTotal. 2023-08-22 22:07:26 -04:00
Qi Xiao
4ceb91901e pkg/eval/vals: Pretend structmaps are maps in typeOf too. 2023-08-22 21:56:02 -04:00
Qi Xiao
62795d907d Format the rule used by compare as an ordered list. 2023-08-22 21:20:46 -04:00
Qi Xiao
fbde7b1208 Fix name of &total option for the order command. 2023-08-22 21:12:52 -04:00
Qi Xiao
e5e26f1e51 Test and document NO_COLOR support. 2023-08-21 00:28:51 -04:00
Qi Xiao
607fa68aca Implement os:stat.
Time fields are omitted for now; they will be added when there's a proper Elvish
binding for time.Time.

This addresses #1659.
2023-08-21 00:05:05 -04:00
Qi Xiao
65bc9580cb pkg/eval/evaltest: Print value diffs by converting them with Repr first.
The options to go-cmp doesn't seem to actually transform lists and maps
properly, so use the string representation for diffs now.
2023-08-20 23:30:30 -04:00
Qi Xiao
95ba078ff6 pkg/eval/evaltest: Implement value matchers with interface. 2023-08-13 23:20:54 -04:00
Qi Xiao
f240df4846 pkg/eval/vals: Add utils {Int64,Uint64}ToNum. 2023-08-13 22:46:22 -04:00
Qi Xiao
e847e677fe Move a lot of symbols from path: to os:.
Most of the symbols moved originate from Go's os package. However,
eval-symlink, which is provided by Go's path/filepath package, is also moved to
the os: module since it requires actual filesystem access. The idea is that
Elvish's path: will only provide functionalities for lexically manipulating
file paths without referencing the actual filesystem, akin to Python's
pathlib.PurePath.

The old symbols in path: are not formally deprecated since the compiler can't
statically check symbols in modules yet.
2023-08-06 12:06:41 -04:00
Qi Xiao
a1b30deb86 pkg/eval/evaltest: Rename TestWithFullSetup -> TestWithSetup.
The old TestWithSetup is now more accurately called TestWithEvalerSetup.
2023-07-22 23:04:18 +01:00
Qi Xiao
981388d5c2 Add file:open-output. 2023-07-22 17:20:19 +01:00
Qi Xiao
cfc914e9ba New read-bytes builtin to read a fixed number of bytes. 2023-07-20 11:24:01 +01:00
Qi Xiao
93423d3244 Support (struct)map with 'r' or 'w' fields in redirections.
Now that pipe is a structmap and structmaps are considered indistinguishable to
normal maps, IO redirection should support arbitrary maps too.

Update the relevant section in the language spec and rewrite it a bit.
2023-07-18 17:52:06 +01:00
Qi Xiao
6481284f58
Merge pull request #1711 from mikelward/1245
Make Concat return a new globPattern.
2023-07-17 23:54:01 +01:00
Qi Xiao
6992c0b693 Make pseudomaps print like [^tag &key=value].
Also make file:pipe output a struct map rather than a pseudomap.
2023-07-17 23:41:43 +01:00
Mikel Ward
8796233de4 Make Concat return a new globPattern.
I don't know if this is fully sufficient, but it seems to fix the specific test
case mentioned.

Fixes #1245
2023-07-16 18:28:32 +01:00
Qi Xiao
96752afa4d Make struct maps indistinguishable from maps to Elvish code.
Struct map is a mechanism to let Go code expose simple structs to Elvish code.
The difference between struct maps and maps is convenience for Go code; they
also have different performance characteristics, but since struct maps are
always quite small, the difference is not meaningful for Elvish's use cases.

As a result, there is no good reason that Elvish code needs to be aware of the
difference between struct maps and normal maps. Making them indistinguishable to
Elvish code simplifies the language.

This commit does the following:

- Change Equal, Hash, Kind and Repr to treat struct maps like maps.

- Change Assoc and Dissoc to "promote" struct maps to maps.

- Remove the custom Repr method of parse.Source.

- Update documentation to reflect this change.
2023-07-14 23:57:38 +01:00
Qi Xiao
900cc52b05 Fix the hash code of maps. 2023-07-14 22:01:32 +01:00
Qi Xiao
f0c5767ab6 pkg/eval: Use json.Number in from-json. 2023-05-22 07:35:17 +01:00
Qi Xiao
155ea5acb1 pkg/eval: Bump the sleep time in the test for peach more.
Another failure in the Linux ARM64 runner: https://cirrus-ci.com/task/6301954620522496
2023-05-20 11:55:31 +01:00
Qi Xiao
2fe4512556 pkg/eval/vals: Make Repr sort map keys before printing.
This addresses #1495.
2023-05-20 10:52:52 +01:00
Qi Xiao
7c0c3eb82d pkg/eval/vals: Correct the godoc of Cmp. 2023-05-20 10:20:48 +01:00
Qi Xiao
c71995ba9a pkg/eval: Add tests for "order &total". 2023-05-19 17:27:37 +01:00
Qi Xiao
058f9818ae pkg/eval: Fix the equality test in "has-value".
Previously Go's == was used to test for equality when the container is not a
map, which is more strict when Elvish's normal equality test. For example,
"has-value [[foo]] [foo]" used to output false, rather than the expected true.
2023-05-19 17:25:36 +01:00
Qi Xiao
3f4bbff9c5 pkg/eval: Add option for total order to the order and compare commands.
The same code will be used to sort map keys when printing maps.

This addresses #1495.
2023-05-18 23:21:18 +01:00
Qi Xiao
25e27d6bb6 pkg/eval/vals: Make Cmp(a, b) return CmpEqual if Equal(a, b).
Also match the order of branches in Cmp and Equal.
2023-05-18 10:45:42 +01:00
Qi Xiao
1e249ed7fb pkg/eval.cmp -> pkg/eval/vals.Cmp. 2023-05-18 10:31:31 +01:00