Skip to content

Diagnostics ​

Extraction never fails silently. Unresolved or malformed constructs emit structured diagnostics:

src/Widget.luau:42: warning[orphaned-within]: @within Panel: no class or module with that name

luaudocs build --emit-only prints all diagnostics without running VitePress, and --strict fails the build on any warning.

Extractor diagnostics carry a file location and code. Renderer and site-sync warnings apply to the site as a whole (without a source file or code) and also count toward --strict.

Severity levels ​

  • error: fails the build. Valid module pages are still emitted and existing pages and navigation stay on disk, but stale-page cleanup and VitePress are skipped and the CLI exits nonzero.
  • warning: printed to stderr. Exits nonzero only under --strict.
  • info: printed dimmed. Never affects the exit code, even under --strict.

Errors ​

CodeWhat it means
parse-errorA file in the module graph could not be read or parsed (syntax error or deleted file).
extract-failedThe symbolic evaluator hit an internal error analyzing a module. Please report it.

Warnings ​

CodeWhat it means
require-unresolvedA surfaced require target could not be resolved (missing file, unknown .luaurc alias, path outside the project, or top-level dynamic assignment such as M.Sub = require(target)). Dynamic helper parameters inside functions (return require(mod)) do not warn, and runtime aliases (@lute, @lune, or [source.aliases]) are treated as external.
orphaned-within@within Name names no known class or module.
duplicate-withinTwo members collide under the same name after @within relocation. The second is dropped.
duplicate-classTwo blocks in one module declare @class with the same name. The duplicate is dropped (see also Info).
duplicate-externalTwo @external tags map the same name. The first wins.
duplicate-typeA type name is declared more than once in a module. The exported (or first) declaration is kept.
param-mismatch@param name doesn't match any parameter in the function signature.
return-count-mismatchMore @return tags than return values in the signature.
duplicate-memberTwo definitions resolve to the same member ID in one container. The later definition is dropped.
malformed-tagA tag requiring a name or URL was written without one (such as a bare @param).
unknown-tag-argA flag tag (such as @yields) was given an unexpected argument.
duplicate-placing-tagMultiple placement tags appear in one doc block (@class and @prop). The first wins.
undocumentedA public member, class, or exported type has no doc comment (emitted when [api] reportUndocumented is enabled).

Info ​

CodeWhat it means
surface-opaqueA module's return value could not be evaluated statically. See Nothing was generated.
orphaned-doc-blockA doc comment with tags (@param, @within) sits above no statement. Plain prose comments are ignored.
unresolved-reexportA re-export targets a symbol its source module doesn't document.
require-nonmoduleA surfaced require resolved to a Folder or non-module path (script.Parent.Assets), leaving no module script to follow.
duplicate-classA floating @class names a class that already exists. Members aimed at that name merge into the existing class.
ignored-tag@__index, accepted for Moonwave compatibility and ignored.
unreached-typesAn unexposed module (such as an internal types.luau) exports types never referenced by a documented signature. Add the module to [source] entries, move types with @within, or re-export them (export type Hook = types.Hook).

Renderer warnings ​

Prefixed with renderer::

MessageWhat it means
page name collisionTwo modules share a page slug. The second gets a numbered slug and a parent-qualified title (Defaults (Flux)).
ambiguous reference name dropped from link tableA [Ref] name matches two equal-standing targets (modules outrank same-named types without warning). Qualify the reference ([Module.State]) or rename.
aliases.<name>: could not load its doc modelA [source.aliases] model URL or path could not be loaded, so links fall back to module pages. Counts toward --strict.

Site-sync warnings ​

Emitted during site file synchronization (all count toward --strict):

MessageWhat it means
[docs] changelog is enabled but CHANGELOG.md was not found[docs] changelog = true is set, but CHANGELOG.md is missing.
[docs] includeReadme is enabled but README.md was not found[docs] includeReadme = true is set, but README.md is missing.
index.md includes .vitepress/generated/readme.md, which only [docs] includeReadme = true keepsCustom index.md includes .vitepress/generated/readme.md while includeReadme is disabled.
README.md links …, which the generated site does not serveA relative link in README.md points outside the docs directory and [repo] url is unset or can't reach it.