Skip to content

Commit

Permalink
deploy: 8d971fe
Browse files Browse the repository at this point in the history
  • Loading branch information
Gohla committed Nov 27, 2023
1 parent 27856a5 commit 2046cd9
Show file tree
Hide file tree
Showing 33 changed files with 217 additions and 191 deletions.
2 changes: 1 addition & 1 deletion 2_incrementality/6_example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ <h2 id="exploring-incrementality"><a class="header" href="#exploring-incremental
You should see the <code>println!</code> in <code>ReadStringFromFile</code> appear in your console as the incremental context correctly determines that this task is new (i.e., has no output) and must be executed.
It should look something like:</p>
<pre><code> Compiling pie v0.1.0 (/pie)
Finished dev [unoptimized + debuginfo] target(s) in 0.64s
Finished dev [unoptimized + debuginfo] target(s) in 0.63s
Running `target/debug/examples/incremental`
A) New task: expect `read_task` to execute
Reading from input.txt with Modified stamper
Expand Down
42 changes: 21 additions & 21 deletions 3_min_sound/2_tracker/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -844,52 +844,52 @@ <h2 id="implement-writing-tracker"><a class="header" href="#implement-writing-tr
Finished dev [unoptimized + debuginfo] target(s) in 0.44s
Running `target/debug/examples/incremental`
A) New task: expect `read_task` to execute
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input.txt&quot;, Modified)
▶ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input.txt&quot;, Modified)
- /tmp/.tmpXbQhvV/input.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input.txt&quot;, Modified)
▶ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input.txt&quot;, Modified)
- /tmp/.tmpgYSG3j/input.txt
◀ Ok(&quot;Hi&quot;)
← Ok(&quot;Hi&quot;)
🏁

B) Reuse: expect no execution
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input.txt&quot;, Modified)
✓ /tmp/.tmpXbQhvV/input.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input.txt&quot;, Modified)
✓ /tmp/.tmpgYSG3j/input.txt
← Ok(&quot;Hi&quot;)
🏁

C) Inconsistent file dependency: expect `read_task` to execute
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input.txt&quot;, Modified)
✗ /tmp/.tmpXbQhvV/input.txt (old: Modified(Some(SystemTime { tv_sec: 1700836228, tv_nsec: 598093563 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1700836228, tv_nsec: 602093540 })))
▶ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input.txt&quot;, Modified)
- /tmp/.tmpXbQhvV/input.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input.txt&quot;, Modified)
✗ /tmp/.tmpgYSG3j/input.txt (old: Modified(Some(SystemTime { tv_sec: 1701091600, tv_nsec: 483383101 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1701091600, tv_nsec: 487383121 })))
▶ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input.txt&quot;, Modified)
- /tmp/.tmpgYSG3j/input.txt
◀ Ok(&quot;Hello&quot;)
← Ok(&quot;Hello&quot;)
🏁

D) Different tasks: expect `read_task_b_modified` and `read_task_b_exists` to execute
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Modified)
▶ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Modified)
- /tmp/.tmpXbQhvV/input_b.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Modified)
▶ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Modified)
- /tmp/.tmpgYSG3j/input_b.txt
◀ Ok(&quot;Test&quot;)
← Ok(&quot;Test&quot;)
🏁
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Exists)
▶ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Exists)
- /tmp/.tmpXbQhvV/input_b.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Exists)
▶ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Exists)
- /tmp/.tmpgYSG3j/input_b.txt
◀ Ok(&quot;Test&quot;)
← Ok(&quot;Test&quot;)
🏁

E) Different stampers: expect only `read_task_b_modified` to execute
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Modified)
✗ /tmp/.tmpXbQhvV/input_b.txt (old: Modified(Some(SystemTime { tv_sec: 1700836228, tv_nsec: 602093540 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1700836228, tv_nsec: 606093517 })))
▶ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Modified)
- /tmp/.tmpXbQhvV/input_b.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Modified)
✗ /tmp/.tmpgYSG3j/input_b.txt (old: Modified(Some(SystemTime { tv_sec: 1701091600, tv_nsec: 487383121 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1701091600, tv_nsec: 491383139 })))
▶ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Modified)
- /tmp/.tmpgYSG3j/input_b.txt
◀ Ok(&quot;Test Test&quot;)
← Ok(&quot;Test Test&quot;)
🏁
→ ReadStringFromFile(&quot;/tmp/.tmpXbQhvV/input_b.txt&quot;, Exists)
✓ /tmp/.tmpXbQhvV/input_b.txt
→ ReadStringFromFile(&quot;/tmp/.tmpgYSG3j/input_b.txt&quot;, Exists)
✓ /tmp/.tmpgYSG3j/input_b.txt
← Ok(&quot;Test&quot;)
🏁
</code></pre>
Expand Down
2 changes: 1 addition & 1 deletion 3_min_sound/3_test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ <h3 id="no-dependencies"><a class="header" href="#no-dependencies">No dependenci
</ul>
<p>The second command should result in something like:</p>
<pre><code> Finished test [unoptimized + debuginfo] target(s) in 0.02s
Running tests/top_down.rs (target/debug/deps/top_down-3dca3681751f21b3)
Running tests/top_down.rs (target/debug/deps/top_down-e757e81b664b50ba)

running 1 test
→ Return(&quot;Hello, World!&quot;)
Expand Down
66 changes: 33 additions & 33 deletions 3_min_sound/4_fix_task_dep/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -350,23 +350,23 @@ <h2 id="manifest-the-bug"><a class="header" href="#manifest-the-bug">Manifest th
</div>
<p>Inspect the build log with <code>cargo test --test top_down test_no_superfluous_task_dependencies</code>.
The third (last) build log should look like this:</p>
<pre><code>→ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)))
? ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
✗ /tmp/.tmpck9zLe/in.txt (old: Modified(Some(SystemTime { tv_sec: 1700836235, tv_nsec: 614054029 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1700836235, tv_nsec: 618054007 })))
▶ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
- /tmp/.tmpck9zLe/in.txt
<pre><code>→ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)))
? ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
✗ /tmp/.tmp4LwYxO/in.txt (old: Modified(Some(SystemTime { tv_sec: 1701091608, tv_nsec: 731422607 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1701091608, tv_nsec: 735422626 })))
▶ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
- /tmp/.tmp4LwYxO/in.txt
◀ Ok(String(&quot;HeLLo, WorLd!&quot;))
← Ok(String(&quot;HeLLo, WorLd!&quot;))
✗ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;Hello, World!&quot;))) ≠ new: Equals(Ok(String(&quot;HeLLo, WorLd!&quot;))))
▶ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)))
→ ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
✗ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;Hello, World!&quot;))) ≠ new: Equals(Ok(String(&quot;HeLLo, WorLd!&quot;))))
▶ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)))
→ ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
← Ok(String(&quot;HeLLo, WorLd!&quot;))
✗ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;Hello, World!&quot;))) ≠ new: Equals(Ok(String(&quot;HeLLo, WorLd!&quot;))))
▶ ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified))
→ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
✗ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;Hello, World!&quot;))) ≠ new: Equals(Ok(String(&quot;HeLLo, WorLd!&quot;))))
▶ ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified))
→ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
← Ok(String(&quot;HeLLo, WorLd!&quot;))
◀ Ok(String(&quot;hello, world!&quot;))
← Ok(String(&quot;hello, world!&quot;))
Expand Down Expand Up @@ -433,14 +433,14 @@ <h2 id="finding-the-cause"><a class="header" href="#finding-the-cause">Finding t
We only manifested the bug in the last test due to having a chain of 2 task dependencies, and by carefully controlling what is being executed and what is being checked.</p>
<p>Recall the second build in the <code>test_no_superfluous_task_dependencies</code> test.
The build log for that build looks like:</p>
<pre><code>→ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)))
▶ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)))
→ ToLower(ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
✓ /tmp/.tmpck9zLe/in.txt
<pre><code>→ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)))
▶ ToUpper(ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)))
→ ToLower(ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
→ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
✓ /tmp/.tmp4LwYxO/in.txt
← Ok(String(&quot;Hello, World!&quot;))
✓ ReadFile(&quot;/tmp/.tmpck9zLe/in.txt&quot;, Modified)
✓ ReadFile(&quot;/tmp/.tmp4LwYxO/in.txt&quot;, Modified)
← Ok(String(&quot;hello, world!&quot;))
◀ Ok(String(&quot;HELLO, WORLD!&quot;))
← Ok(String(&quot;HELLO, WORLD!&quot;))
Expand Down Expand Up @@ -719,24 +719,24 @@ <h2 id="fixing-the-bug"><a class="header" href="#fixing-the-bug">Fixing the bug<
This is because our changes have correctly removed several superfluous task requires, which influences these assertions.</p>
<p>Inspect the build log for this test with <code>cargo test --test top_down test_require_task</code>.
The second build now looks like:</p>
<pre><code>→ ToLower(ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified)
✓ /tmp/.tmpkiJIrP/in.txt
✓ ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified)
<pre><code>→ ToLower(ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified)
✓ /tmp/.tmpeCgW0N/in.txt
✓ ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified)
← Ok(String(&quot;hello world!&quot;))
</code></pre>
<p>In this second build, <code>ReadFile</code> is now no longer required, and instead is only checked.
This is correct, and does not make any assertions fail.</p>
<p>The third build now looks like:</p>
<pre><code>→ ToLower(ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified)
✗ /tmp/.tmpkiJIrP/in.txt (old: Modified(Some(SystemTime { tv_sec: 1700836236, tv_nsec: 518048930 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1700836236, tv_nsec: 522048908 })))
▶ ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified)
- /tmp/.tmpkiJIrP/in.txt
<pre><code>→ ToLower(ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified))
? ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified)
✗ /tmp/.tmpeCgW0N/in.txt (old: Modified(Some(SystemTime { tv_sec: 1701091609, tv_nsec: 599426776 })) ≠ new: Modified(Some(SystemTime { tv_sec: 1701091609, tv_nsec: 603426796 })))
▶ ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified)
- /tmp/.tmpeCgW0N/in.txt
◀ Ok(String(&quot;!DLROW OLLEH&quot;))
✗ ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;HELLO WORLD!&quot;))) ≠ new: Equals(Ok(String(&quot;!DLROW OLLEH&quot;))))
▶ ToLower(ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified))
→ ReadFile(&quot;/tmp/.tmpkiJIrP/in.txt&quot;, Modified)
✗ ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified) (old: Equals(Ok(String(&quot;HELLO WORLD!&quot;))) ≠ new: Equals(Ok(String(&quot;!DLROW OLLEH&quot;))))
▶ ToLower(ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified))
→ ReadFile(&quot;/tmp/.tmpeCgW0N/in.txt&quot;, Modified)
← Ok(String(&quot;!DLROW OLLEH&quot;))
◀ Ok(String(&quot;!dlrow olleh&quot;))
← Ok(String(&quot;!dlrow olleh&quot;))
Expand Down
2 changes: 1 addition & 1 deletion 4_example/c_4_grammar.pest
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
num = { ASCII_DIGIT+ }
num = @{ ASCII_DIGIT+ }

main = { SOI ~ num ~ EOI }

Expand Down
33 changes: 23 additions & 10 deletions 4_example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -176,12 +176,19 @@ <h1 class="menu-title">Build your own Programmatic Incremental Build System</h1>
<div id="content" class="content">
<main>
<h1 id="example-interactive-parser-development"><a class="header" href="#example-interactive-parser-development">Example: Interactive Parser Development</a></h1>
<p>To demonstrate what can be done with the programmatic incremental build system we just created, we will create a simple “interactive parser development” example.
In this example, we can interactively develop a grammar for a new (programming) language, and test that grammar against several example files written in the new language.</p>
<p>To demonstrate what can be done with the programmatic incremental build system we just created, we will create a simple “parser development” example.
In this example, we can develop a grammar for a new (programming) language, and test that grammar against several example files written in the new language.</p>
<p>It will have both a batch mode and an interactive mode.
In the batch mode, the grammar is checked and compiled, the example program files are parsed with the grammar, and the results are printed to the terminal.
The interactive mode will start up an interactive editor in which we can develop and test the grammar interactively.
We will develop tasks to perform grammar compilation and parsing, and incrementally execute them with PIE.
Both batch and interactive mode will use the same tasks!</p>
<p>We will use <a href="https://pest.rs/" title="" target="_blank">pest</a> as the parser framework, because it is written in Rust and can be easily embedded into an application.
Pest uses Parsing Expression Grammars (PEGs) which are easy to understand, which is also good for this example.</p>
<p>For the GUI, we will use <a href="https://ratatui.rs/" title="" target="_blank">Ratatui</a>, which is a cross-platform terminal GUI framework, along with <a href="https://github.com/rhysd/tui-textarea" title="" target="_blank">tui-textarea</a> for a text editor widget.
We could use a more featured GUI framework like <a href="https://github.com/emilk/egui" title="" target="_blank">egui</a>, but for this example we’ll keep it simple and runnable in a terminal.</p>
<p>As a little teaser, this is what the interactive mode looks like:</p>
<script src="https://asciinema.org/a/VfP8uiZ0MSs5QgzY0BhIxKp6L.js" id="asciicast-VfP8uiZ0MSs5QgzY0BhIxKp6L" async data-autoplay="true" data-loop="true" data-speed="1.25" data-idleTimeLimit="1" data-theme="solarized-dark"></script>
<p>We will continue as follows:</p>
<ol>
<li>Implement compilation of pest grammars and parsing of text with the compiled grammar.</li>
Expand Down Expand Up @@ -679,7 +686,7 @@ <h2 id="parse-cli-arguments"><a class="header" href="#parse-cli-arguments">Parse
Successes are printed to stdout and errors are written to <code>errors</code>.
Finally, we print <code>errors</code> to stdout if there are any.</p>
<p>To test this out, we need a grammar and some test files. Create <code>grammar.pest</code>:</p>
<pre><code>num = { ASCII_DIGIT+ }
<pre><code>num = @{ ASCII_DIGIT+ }

main = { SOI ~ num ~ EOI }

Expand All @@ -691,15 +698,21 @@ <h2 id="parse-cli-arguments"><a class="header" href="#parse-cli-arguments">Parse
<p><a class="admonition-anchor-link" href="#admonition-pest-grammars"></a></p>
</div>
<div>
<p>It’s not important for this example to understand pest grammars, but I will explain the basics of this grammar.
<p>You don’t need to fully understand pest grammars to finish this example.
However, I will explain the basics of this grammar here.
Feel free to learn and experiment more if you are interested.</p>
<p>This grammar parses numbers with the <code>num</code> rule.
The <code>main</code> rule ensures that there is no additional text before and after a <code>num</code> rule, using <a href="https://pest.rs/book/grammars/syntax.html#start-and-end-of-input" title="" target="_blank">
<p>Grammars are <a href="https://pest.rs/book/grammars/syntax.html#syntax-of-pest-grammars" title="" target="_blank">lists of rules</a>, such as <code>num</code> and <code>main</code>.
This grammar parses numbers with the <code>num</code> rule, matching 1 or more <code>ASCII_DIGIT</code> with <a href="https://pest.rs/book/grammars/syntax.html#repetition" title="" target="_blank">repetition</a>.</p>
<p>The <code>main</code> rule ensures that there is no additional text before and after a <code>num</code> rule, using <a href="https://pest.rs/book/grammars/syntax.html#start-and-end-of-input" title="" target="_blank">
<code>SOI</code> (start of input) <code>EOI</code> (end of input)</a>, and using the <a href="https://pest.rs/book/grammars/syntax.html#sequence" title="" target="_blank">
<code>~</code> operator to sequence</a> these rules.
We set the <a href="https://pest.rs/book/grammars/syntax.html#implicit-whitespace" title="" target="_blank">
<code>WHITESPACE</code> builtin rule</a> to <code>{ &quot; &quot; | &quot;\t&quot; | &quot;\n&quot; | &quot;\r&quot; }</code> so that spaces, tabs, newlines, and carriage return characters are implicitly allowed between returns.
The <code>_</code> operator before <code>{</code> indicates that it is a <a href="https://pest.rs/book/grammars/syntax.html#silent" title="" target="_blank">silent rule</a> that does not contribute to the parse result.</p>
<code>~</code> operator to sequence</a> these rules.</p>
<p>We set the <a href="https://pest.rs/book/grammars/syntax.html#implicit-whitespace" title="" target="_blank">
<code>WHITESPACE</code> builtin rule</a> to <code>{ &quot; &quot; | &quot;\t&quot; | &quot;\n&quot; | &quot;\r&quot; }</code> so that spaces, tabs, newlines, and carriage return characters are implicitly allowed between sequenced rules.
The <code>@</code> operator before <code>{</code> indicates that it is an <a href="https://pest.rs/book/grammars/syntax.html#atomic" title="" target="_blank">atomic rule</a>, disallowing implicit whitespace.
We want this on the <code>num</code> rule so that we can’t add spaces in between digits of a number (try removing it and see!)</p>
<p>The <code>_</code> operator before <code>{</code> indicates that it is a <a href="https://pest.rs/book/grammars/syntax.html#silent" title="" target="_blank">silent rule</a> that does not contribute to the parse result.
This is important when processing the parse result into an <a href="https://pest.rs/book/examples/json.html#ast-generation" title="" target="_blank">Abstract Syntax Tree (AST)</a>.
In this example we just print the parse result, so silent rules are not really needed, but I included it for completeness.</p>
</div>
</div>
<p>Create <code>test_1.txt</code> with:</p>
Expand Down
Binary file modified gen/0_intro/1_setup/source.zip
Binary file not shown.
Binary file modified gen/1_programmability/1_api/source.zip
Binary file not shown.
Binary file modified gen/1_programmability/2_non_incremental/source.zip
Binary file not shown.
Binary file modified gen/2_incrementality/1_require_file/source.zip
Binary file not shown.
Binary file modified gen/2_incrementality/2_stamp/source.zip
Binary file not shown.
Binary file modified gen/2_incrementality/3_dependency/source.zip
Binary file not shown.
Binary file modified gen/2_incrementality/4_store/source.zip
Binary file not shown.
Binary file modified gen/2_incrementality/5_context/source.zip
Binary file not shown.
2 changes: 1 addition & 1 deletion gen/2_incrementality/6_example/b_main.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Compiling pie v0.1.0 (/pie)
Finished dev [unoptimized + debuginfo] target(s) in 0.64s
Finished dev [unoptimized + debuginfo] target(s) in 0.63s
Running `target/debug/examples/incremental`
A) New task: expect `read_task` to execute
Reading from input.txt with Modified stamper
Binary file modified gen/2_incrementality/6_example/source.zip
Binary file not shown.
Binary file modified gen/3_min_sound/1_session/source.zip
Binary file not shown.
Loading

0 comments on commit 2046cd9

Please sign in to comment.