| ... | ... | @@ -413,7 +413,7 @@ pub fn main() !void { |
| 413 | 413 | <p> |
| 414 | 414 | The code sample shows the contents of a file named <code class="file">hello.zig</code>. Files storing Zig |
| 415 | 415 | source code are {#link|UTF-8 encoded|Source Encoding#} text files. The files storing |
| 416 | | Zig source code are usually named with the <code class="file"><em>.zig</em></code> extension. |
| 416 | Zig source code must be named with the <code class="file"><em>.zig</em></code> extension. |
| 417 | 417 | </p> |
| 418 | 418 | <p> |
| 419 | 419 | Following the <code class="file">hello.zig</code> Zig code sample, the {#link|Zig Build System#} is used |
| ... | ... | @@ -487,7 +487,7 @@ pub fn main() !void { |
| 487 | 487 | purposely written to show how to perform {#link|string|String Literals and Unicode Code Point Literals#} |
| 488 | 488 | substitution in the {#syntax#}print{#endsyntax#} function. The curly-braces inside of the first argument |
| 489 | 489 | are substituted with the compile-time known value inside of the second argument |
| 490 | | (known as an {#link|tuple|Tuples#}). The <code>\n</code> |
| 490 | (known as a {#link|tuple|Tuples#}). The <code>\n</code> |
| 491 | 491 | inside of the double-quotes of the first argument is the {#link|escape sequence|Escape Sequences#} for the |
| 492 | 492 | newline character. The {#link|try#} expression evaluates the result of {#syntax#}stdout.print{#endsyntax#}. |
| 493 | 493 | If the result is an error, then the {#syntax#}try{#endsyntax#} expression will return from |
| ... | ... | @@ -518,6 +518,14 @@ pub fn main() void { |
| 518 | 518 | {#see_also|Values|@import|Errors|Root Source File|Source Encoding#} |
| 519 | 519 | {#header_close#} |
| 520 | 520 | {#header_open|Comments#} |
| 521 | <p> |
| 522 | Zig supports 3 types of comments. Normal comments are ignored, but doc comments |
| 523 | and top-level doc comments are used by the compiler to generate the package documentation. |
| 524 | </p> |
| 525 | <p> |
| 526 | The generated documentation is still experimental, and can be produced with: |
| 527 | </p> |
| 528 | {#shell_samp#}zig test -femit-docs main.zig{#end_shell_samp#} |
| 521 | 529 | {#code_begin|exe|comments#} |
| 522 | 530 | const print = @import("std").debug.print; |
| 523 | 531 | |
| ... | ... | @@ -535,7 +543,7 @@ pub fn main() void { |
| 535 | 543 | comments in C). This helps allow Zig to have the property that each line |
| 536 | 544 | of code can be tokenized out of context. |
| 537 | 545 | </p> |
| 538 | | {#header_open|Doc comments#} |
| 546 | {#header_open|Doc Comments#} |
| 539 | 547 | <p> |
| 540 | 548 | A doc comment is one that begins with exactly three slashes (i.e. |
| 541 | 549 | {#syntax#}///{#endsyntax#} but not {#syntax#}////{#endsyntax#}); |
| ... | ... | @@ -562,21 +570,44 @@ const Timestamp = struct { |
| 562 | 570 | }; |
| 563 | 571 | {#code_end#} |
| 564 | 572 | <p> |
| 565 | | Doc comments are only allowed in certain places; eventually, it will |
| 566 | | become a compile error to have a doc comment in an unexpected place, such as |
| 567 | | in the middle of an expression, or just before a non-doc comment. |
| 573 | Doc comments are only allowed in certain places; it is a compile error to |
| 574 | have a doc comment in an unexpected place, such as in the middle of an expression, |
| 575 | or just before a non-doc comment. |
| 576 | </p> |
| 577 | {#code_begin|obj_err|invalid_doc-comment|expected type expression, found 'a document comment'#} |
| 578 | /// doc-comment |
| 579 | //! top-level doc-comment |
| 580 | const std = @import("std"); |
| 581 | {#code_end#} |
| 582 | {#code_begin|obj_err|unattached_doc-comment|unattached documentation comment#} |
| 583 | pub fn main() void {} |
| 584 | |
| 585 | /// End of file |
| 586 | {#code_end#} |
| 587 | <p> |
| 588 | Doc comments can be interleaved with normal comments. Currently, when producing |
| 589 | the package documentation, normal comments are merged with doc comments. |
| 568 | 590 | </p> |
| 569 | 591 | {#header_close#} |
| 570 | 592 | {#header_open|Top-Level Doc Comments#} |
| 571 | | <p>User documentation that doesn't belong to whatever |
| 572 | | immediately follows it, like {#link|container|Containers#}-level documentation, goes |
| 573 | | in top-level doc comments. A top-level doc comment is one that |
| 574 | | begins with two slashes and an exclamation point: |
| 575 | | {#syntax#}//!{#endsyntax#}.</p> |
| 593 | <p> |
| 594 | A top-level doc comment is one that begins with two slashes and an exclamation |
| 595 | point: {#syntax#}//!{#endsyntax#}; it documents the current module. |
| 596 | </p> |
| 597 | <p> |
| 598 | It is a compile error if a top-level doc comment is not placed at the start |
| 599 | of a {#link|container|Containers#}, before any expressions. |
| 600 | </p> |
| 576 | 601 | {#code_begin|syntax|tldoc_comments#} |
| 577 | 602 | //! This module provides functions for retrieving the current date and |
| 578 | 603 | //! time with varying degrees of precision and accuracy. It does not |
| 579 | 604 | //! depend on libc, but will use functions from it if available. |
| 605 | |
| 606 | const S = struct { |
| 607 | //! Top level comments are allowed inside a container other than a module, |
| 608 | //! but it is not very useful. Currently, when producing the package |
| 609 | //! documentation, these comments are ignored. |
| 610 | }; |
| 580 | 611 | {#code_end#} |
| 581 | 612 | {#header_close#} |
| 582 | 613 | {#header_close#} |
| ... | ... | @@ -1060,6 +1091,11 @@ test "expect addOne adds one to 41" { |
| 1060 | 1091 | try std.testing.expect(addOne(41) == 42); |
| 1061 | 1092 | } |
| 1062 | 1093 | |
| 1094 | test addOne { |
| 1095 | // A test name can also be written using an identifier. |
| 1096 | try std.testing.expect(addOne(41) == 42); |
| 1097 | } |
| 1098 | |
| 1063 | 1099 | /// The function `addOne` adds one to the number given as its argument. |
| 1064 | 1100 | fn addOne(number: i32) i32 { |
| 1065 | 1101 | return number + 1; |
| ... | ... | @@ -1087,20 +1123,25 @@ fn addOne(number: i32) i32 { |
| 1087 | 1123 | printed to standard error by the default test runner: |
| 1088 | 1124 | </p> |
| 1089 | 1125 | <dl> |
| 1090 | | <dt><samp>Test [1/1] test "expect addOne adds one to 41"...</samp></dt> |
| 1126 | <dt><samp>Test [1/2] test.expect addOne adds one to 41...</samp></dt> |
| 1091 | 1127 | <dd>Lines like this indicate which test, out of the total number of tests, is being run. |
| 1092 | | In this case, <samp>[1/1]</samp> indicates that the first test, out of a total of |
| 1093 | | one test, is being run. Note that, when the test runner program's standard error is output |
| 1128 | In this case, <samp>[1/2]</samp> indicates that the first test, out of a total of |
| 1129 | two test, is being run. Note that, when the test runner program's standard error is output |
| 1094 | 1130 | to the terminal, these lines are cleared when a test succeeds. |
| 1095 | 1131 | </dd> |
| 1096 | | <dt><samp>All 1 tests passed.</samp></dt> |
| 1132 | <dt><samp>Test [2/2] decltest.addOne...</samp></dt> |
| 1133 | <dd>When the test name is an identifier, the default test runner uses the text |
| 1134 | decltest instead of test. |
| 1135 | </dd> |
| 1136 | <dt><samp>All 2 tests passed.</samp></dt> |
| 1097 | 1137 | <dd>This line indicates the total number of tests that have passed.</dd> |
| 1098 | 1138 | </dl> |
| 1099 | 1139 | {#header_open|Test Declarations#} |
| 1100 | 1140 | <p> |
| 1101 | 1141 | Test declarations contain the {#link|keyword|Keyword Reference#} {#syntax#}test{#endsyntax#}, followed by an |
| 1102 | | optional name written as a {#link|string literal|String Literals and Unicode Code Point Literals#}, followed |
| 1103 | | by a {#link|block|Blocks#} containing any valid Zig code that is allowed in a {#link|function|Functions#}. |
| 1142 | optional name written as a {#link|string literal|String Literals and Unicode Code Point Literals#} or an |
| 1143 | {#link|identifier|Identifiers#}, followed by a {#link|block|Blocks#} containing any valid Zig code that |
| 1144 | is allowed in a {#link|function|Functions#}. |
| 1104 | 1145 | </p> |
| 1105 | 1146 | <aside> |
| 1106 | 1147 | By convention, non-named tests should only be used to {#link|make other tests run|Nested Container Tests#}. |