Nix Documentation | 434 Members | |
| Discussion about documentation improvements around the Nix ecosystem | 91 Servers |
| Sender | Message | Time |
|---|---|---|
| 17 Jan 2024 | ||
| My opinion on this somewhat technically unqualified because I haven’t done concrete work on it, but I see a few theoretical advantages to have pairs of code blocks for input/output:
Generally documentation (and everything, really) should be low-tech so it’s easy to contribute to and understand how it works. That is, it shouldn’t do anything clever, because it will be hard to change for most people if it does, if only because it requires time to figure out. And time is a very scarce resource. | 08:02:49 | |
| The nix manuals are build with mdbook, which has stuff like https://github.com/FauconFan/mdbook-cmdrun which might be a possible solution for repl testing | 08:12:47 | |
| * The nix manuals are built with mdbook, which has stuff like https://github.com/FauconFan/mdbook-cmdrun which might be a possible solution for repl testing | 08:12:54 | |
| Ideally the manuals should be able to reuse the same solution, but I find that hard unless the manuals move to mdbook as well (something that I have in a note to maybe explore some day) | 08:13:44 | |
In reply to @fricklerhandwerk:matrix.org Based on your input: https://github.com/NixOS/nix.dev/issues/864 I am not sure if this qualifies as low-tech. Maybe it does because all it uses is a CLI tool. With modern tools, it is easy to make a heavily automatically documented CLI tool (e.g. if using Rust: can use However, low-tech ought to be measured against cost-of-manual-work? In this particular case: cost of copying+pasting, verifying output expression against expectation, validating that examples remain valid across Nix updates. | 11:05:57 | |
In reply to @fricklerhandwerk:matrix.org* Based on your input: https://github.com/NixOS/nix.dev/issues/864 I am not sure if this qualifies as low-tech. Maybe it does because all it uses is a CLI tool. With modern tools, it is easy to make a heavily automatically documented CLI tool (e.g. if using Rust: can use However, low-tech ought to be measured against cost-of-manual-work? In this particular case: cost of copying+pasting, verifying output expression against expectation, validating that examples remain valid across Nix updates. (Regardless: not a "must-do". Only a "could-do". Happy to execute on a draft version, if time can be made for its review, with full understanding that it will likely not be accepted.) | 11:33:17 | |
| * Based on your input: https://github.com/NixOS/nix.dev/issues/864 I am not sure if this qualifies as low-tech. Maybe it does because all it uses is a CLI tool. With modern tools, it is easy to make a heavily automatically documented CLI tool (e.g. if using Rust: can use However, low-tech ought to be measured against cost-of-manual-work? In this particular case: cost of copying+pasting, verifying output expression against expectation, validating that examples remain valid across Nix updates. (Regardless: not a "must-do". Only a "could-do". Happy to execute on a draft version, if time can be made for its review, with full understanding that it will likely not be accepted. Will not create a draft version if it only adds to review burden.) | 11:34:03 | |
| Per your request, even simpler: https://github.com/NixOS/nix/pull/9793 | 11:35:04 | |
| * Based on your input: https://github.com/NixOS/nix.dev/issues/864 I am not sure if this qualifies as low-tech. Maybe it does because all it uses is a CLI tool. With modern tools, it is easy to make a heavily automatically documented CLI tool (e.g. if using Rust: can use However, low-tech ought to be measured against cost-of-manual-work? In this particular case: cost of copying+pasting, verifying output expression against expectation, validating that examples remain valid across Nix updates. (Regardless: not a "must-do". Only a "could-do". Happy to execute on a draft version, if time can be made for its review, with full understanding that it will likely not be accepted. Will not create a draft version if it only adds to review burden.) | 12:02:40 | |
| bzm3r: the doctester is coming along | 12:05:26 | |
In reply to @mightyiam:matrix.orgIs there an intro document to read which lays out the project's scope/goals? Do the simplest "parts" (as thought about in https://github.com/NixOS/nix.dev/issues/864) exist already for usage as CLI tools? | 12:08:00 | |
In reply to @mightyiam:matrix.org* Is there an intro document to read which lays out the project's scope/goals? Do the simplest "parts" (as thought about in https://github.com/NixOS/nix.dev/issues/864) exist already for usage as "manual" CLI tools? | 12:08:27 | |
| * Is there an intro document to read which lays out the project's scope/goals? Do the simplest "parts" (as thought about in https://github.com/NixOS/nix.dev/issues/864) exist already for usage as "manually invoked CLI tools? | 12:10:15 | |
| * Is there an intro document to read which lays out the project's scope/goals? Do the simplest "parts" (as thought about in https://github.com/NixOS/nix.dev/issues/864) exist already for usage as manually invoked CLI tools? | 12:10:20 | |
| Sorry, there's no documentation. There are tests for the repl examples and there are tests for the WIP expression examples. https://github.com/mobusoperandi/eelco/tree/0eb9042220befe188aa4399ffc6615579cebdd5f/crates/eelco/tests | 12:10:46 | |
| Repl example example:
| 12:11:57 | |
| Expression example example:
If it evaluates into | 12:13:49 | |
| For the expression example, we can think of a future feature where the expression is a function that will be called with a scope. | 12:16:05 | |
| The usage of assertions in examples is inspired by Rust doctests. | 12:18:23 | |
In reply to @mightyiam:matrix.orgHow does a user specify input? What kind of output does does a doc tester produce? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:22:53 | |
In reply to @mightyiam:matrix.org* How does a user specify input (is there some sort of expected syntax for that?)? What kind of output does does a doc tester produce? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:23:13 | |
| * How does a user specify input (is there some sort of expected syntax for that, or is it just a nix assertion expression)? What kind of output does does a doc tester produce? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:23:24 | |
| * How does a user specify input (e.g. is there some sort of expected syntax for that, or is it just a nix assertion expression; if the latter, can the tool take a file which is just a list of assertions to verify)? What kind of output does does a doc tester produce (is it just a pass/fail, is there a way to extract the LHS and RHS of the input assertions)? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:25:18 | |
| * How does a user specify input (e.g. is there some sort of expected syntax for that, or is it just a nix assertion expression; if the latter, can the tool take a file which is just a list of assertions to verify, even if the file is not itself a proper "*.nix"?)? What kind of output does does a doc tester produce (is it just a pass/fail, is there a way to extract the LHS and RHS of the input assertions)? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:26:50 | |
| * How does a user specify input, precisely? If I look for example at the Rust doctests page, there's a fair bit there about syntax. There's also the additional constraint that these things exist in doc strings. We don't really/necessarily have docstrings here, so how do I present a list of assertions for a nix repl to check? What kind of output does does a doc tester produce (is it just a pass/fail, is there a way to extract the LHS and RHS of the input assertions)? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:30:57 | |
| I lost you at "input". What's input, please? | 12:31:03 | |
In reply to @mightyiam:matrix.orgSorry, I realized that I wasn't being too clear, so I tried to work no improving what I mean. How do I give the program something to test? Do I give it a nix expression that is an assertion? Which assertion function precisely should I be using in that case? lib.assertMessage? One of the arguments to lib.assertMessage is a predicate to test. | 12:35:45 | |
In reply to @mightyiam:matrix.org* Sorry, I realized that I wasn't being too clear, so I tried to work on improving what I mean. How do I give the program something to test? Do I give it a nix expression that is an assertion? Which assertion function precisely should I be using in that case? lib.assertMessage? One of the arguments to lib.assertMessage is a predicate to test. | 12:35:54 | |
* Sorry, I realized that I wasn't being too clear, so I tried to work on improving what I mean. How do I give the program something to test? Do I give it a nix expression that is an assertion? Which assertion function precisely should I be using in that case? lib.assertMessage? | 12:36:10 | |
| * How does a user specify input, precisely? If I look for example at the Rust doctests page, there's a fair bit there about syntax. There's also the additional constraint that these things exist in doc strings. We don't really/necessarily have docstrings here, so how do I present to the program what is essentially a list of assertions for a nix repl to check? What kind of output does does a doc tester produce (is it just a pass/fail, is there a way to extract the LHS and RHS of the input assertions)? Would you find it useful to co-opt the language/structure in the issue linked above, or does it pose unnecessary constraints on your work? | 12:36:45 | |