OCaml: Minor formatting improvements to README

This commit is contained in:
Juno Takano 2025-05-08 23:41:18 -03:00
commit 6096817932

View file

@ -16,18 +16,18 @@ Grammar v0.2:
Written using the ISO 14977 EBNF Notation.
In this grammar, `digit` implies `decimal digit`. Spaces between the key and the `=` operator are lexed but meaningless. Spaces between the `=` operator and the first non-space character of the value are lexed and considered as part of the value. Spaces before the key and between the value and the newline are not lexed.
In this grammar, `digit` implies `decimal digit`. Spaces between the key and the `=` operator are lexed but meaningless. The first space after the `=` operator is parsed but meaningless. Additional spaces between the first space after the `=` operator and the first non-space character of the value are lexed and considered as part of the value. Spaces before the key and after the last non-space character until the newline are not lexed.
- Note: non-terminals `key` and `value` are ambiguous.
- ~Note: non-terminals `key` and `value` are ambiguous~.
- Resolved by specifying what character terminates each
## Task list
- [ ] Spec requirements integration test coverage
- [ ] Spec requirements
- [x] Add log function
- [x] Output begins with ` [log] `
- [x] Only prints if `DEBUG` is set
- [ ] Add interactive pkg tests (INS v0 B2.5)
- [ ] Add interactive pkg tests (INS[^1] v0 B2.5[^2])
- [x] Get su command from `$XDG_CONFIG_HOME/tori/tori.conf`
- [ ] Default to `su -c`
- [ ] Handle fatal `Sys_error` if `tori.conf` doesn't exist
@ -36,7 +36,7 @@ In this grammar, `digit` implies `decimal digit`. Spaces between the key and the
- [x] Validation
- [x] Valid path or in `PATH`
- [x] Executability
- ~~`true` exits with status 0 (see note 3)~~
- ~`true` exits with status 0~[^3]
- [x] Add logging
- [x] Logs only if DEBUG is set
- [x] Print each command executed, not just package names
@ -46,9 +46,9 @@ In this grammar, `digit` implies `decimal digit`. Spaces between the key and the
- [x] Unrecognized command: exit code 1
- [x] Command `user`: print the output of `whoami`
- [x] Command `os`: print the OS name
- [x] log the contents of /etc/os-release
- [x] log the contents of `/etc/os-release`[^4]
- [ ] Refactorings
- [ ] Incrementals
- [ ] Simplify and analyze `System.File`
- [ ] Simplify Reader
@ -63,22 +63,16 @@ In this grammar, `digit` implies `decimal digit`. Spaces between the key and the
- [ ] <https://github.com/ninjaaron/ocaml-subprocess>
- [ ] <https://github.com/charlesetc/feather>
### Notes
1. INS = Iganaq Napkin Spec: <https://brew.bsd.cafe/tori/iganaq#specification>
2. INS v0 B2.5 "MUST NOT run any system commands" is only testable if we wrap
command execution properly in e.g. a list containing all executed commands
and ensure no command is ever executed without being appended to it
3. INS v0 A3.4 "running 'true' with exit code 0" requires the user to input
their password every time. This should be dropped from the spec instead
4. INS v0.1 changes requirement B2.3 to "MUST print the OS name and MUST log
contents of /etc/os-release" in order to make the logging function testable
without user input
3. As per item 3 above, INS v0.2 drops "run 'true' with exit code 0" from A3.4
## References
- ISO 14977 EBNF Notation: <https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf>
- Comparison of BNF notations: <https://www.cs.man.ac.uk/~pjj/bnf/ebnf.html>
- W3C ABNF Notation: <https://www.w3.org/Notation.html>
- IETF RFC 5234 ABNF Notation (replaces 4234, 2234): <https://www.rfc-editor.org/rfc/rfc5234>
### Notes
[^1]: INS, Iganaq Napkin Spec: <https://brew.bsd.cafe/tori/iganaq#specification>
[^2]: INS v0 B2.5 "MUST NOT run any system commands" is only testable if we wrap command execution properly in e.g. a monad or list containing all executed commands, ensuring no command is ever executed without being appended to it
[^3]: INS v0 A3.4 "running 'true' with exit code 0" requires the user to input their password every time. This was dropped in INS v0.2, where "run 'true' with exit code 0" was removed from A3.4
[^4]: INS v0.1 changes requirement B2.3 to "MUST print the OS name and MUST log contents of /etc/os-release" in order to make the logging function testable without user input