Skip to content

Commit bce6a7c

Browse files
committed
langref: improve @import documentation
Rewrite to be more clear and correct. Also, explain ZON imports. Resolves: #23314
1 parent e941ce3 commit bce6a7c

File tree

1 file changed

+17
-26
lines changed

1 file changed

+17
-26
lines changed

doc/langref.html.in

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4952,34 +4952,25 @@ fn cmpxchgWeakButNotAtomic(comptime T: type, ptr: *T, expected_value: T, new_val
49524952
{#header_close#}
49534953

49544954
{#header_open|@import#}
4955-
<pre>{#syntax#}@import(comptime path: []const u8) type{#endsyntax#}</pre>
4956-
<p>
4957-
This function finds a zig file corresponding to {#syntax#}path{#endsyntax#} and adds it to the build,
4958-
if it is not already added.
4959-
</p>
4960-
<p>
4961-
Zig source files are implicitly structs, with a name equal to the file's basename with the extension
4962-
truncated. {#syntax#}@import{#endsyntax#} returns the struct type corresponding to the file.
4963-
</p>
4964-
<p>
4965-
Declarations which have the {#syntax#}pub{#endsyntax#} keyword may be referenced from a different
4966-
source file than the one they are declared in.
4967-
</p>
4968-
<p>
4969-
{#syntax#}path{#endsyntax#} can be a relative path or it can be the name of a package.
4970-
If it is a relative path, it is relative to the file that contains the {#syntax#}@import{#endsyntax#}
4971-
function call.
4972-
</p>
4973-
<p>
4974-
The following packages are always available:
4975-
</p>
4955+
<pre>{#syntax#}@import(comptime target: []const u8) anytype{#endsyntax#}</pre>
4956+
<p>Imports the file at {#syntax#}target{#endsyntax#}, adding it to the compilation if it is not already
4957+
added. {#syntax#}target{#endsyntax#} is either a relative path to another file from the file containing
4958+
the {#syntax#}@import{#endsyntax#} call, or it is the name of a {#link|module|Compilation Model#}, with
4959+
the import referring to the root source file of that module. Either way, the file path must end in
4960+
either <code>.zig</code> (for a Zig source file) or <code>.zon</code> (for a ZON data file).</p>
4961+
<p>If {#syntax#}target{#endsyntax#} refers to a Zig source file, then {#syntax#}@import{#endsyntax#} returns
4962+
that file's {#link|corresponding struct type|Source File Structs#}, essentially as if the builtin call was
4963+
replaced by {#syntax#}struct { FILE_CONTENTS }{#endsyntax#}. The return type is {#syntax#}type{#endsyntax#}.</p>
4964+
<p>If {#syntax#}target{#endsyntax#} refers to a ZON file, then {#syntax#}@import{#endsyntax#} returns the value
4965+
of the literal in the file. If there is an inferred {#link|result type|Result Types#}, then the return type
4966+
is that type, and the ZON literal is interpreted as that type ({#link|Result Types#} are propagated through
4967+
the ZON expression). Otherwise, the return type is the type of the equivalent Zig expression, essentially as
4968+
if the builtin call was replaced by the ZON file contents.</p>
4969+
<p>The following modules are always available for import:</p>
49764970
<ul>
49774971
<li>{#syntax#}@import("std"){#endsyntax#} - Zig Standard Library</li>
4978-
<li>{#syntax#}@import("builtin"){#endsyntax#} - Target-specific information
4979-
The command <code>zig build-exe --show-builtin</code> outputs the source to stdout for reference.
4980-
</li>
4981-
<li>{#syntax#}@import("root"){#endsyntax#} - Root source file
4982-
This is usually <code>src/main.zig</code> but depends on what file is built.
4972+
<li>{#syntax#}@import("builtin"){#endsyntax#} - Target-specific information. The command <code>zig build-exe --show-builtin</code> outputs the source to stdout for reference.</li>
4973+
<li>{#syntax#}@import("root"){#endsyntax#} - Alias for the root module. In typical project structures, this means it refers back to <code>src/main.zig</code>.
49834974
</li>
49844975
</ul>
49854976
{#see_also|Compile Variables|@embedFile#}

0 commit comments

Comments
 (0)