# `Tack.Credo.Check.PublicFunctionDoc`
[🔗](https://github.com/giggleton/pica/blob/v0.1.0/dev/tack/credo/check/public_function_doc.ex#L1)

## Basics

> #### This check is disabled by default. {: .neutral}
>
> [Learn how to enable it](`e:credo:config_file.html#checks`) via `.credo.exs`.

This check has a base priority of `normal` and works with any version of Elixir.

## Explanation

Every public function carries a `@doc`.

CLAUDE.md, Conventions:

> **Document public API.** Every module gets a `@moduledoc` and every public function a
> `@doc` (and a `@spec`); these are the pure core's contract and feed `ex_doc`. Use
> `@moduledoc false` only for modules with no public surface. Private functions (`defp`)
> don't need `@doc`; clarify them with a brief comment when non-obvious.

Two thirds of that sentence are enforced elsewhere — `Credo.Check.Readability.ModuleDoc` for
the moduledoc and `Credo.Check.Readability.Specs` for the spec, both taking the same `files:`
exclusions as this check. This is the third.

A function counts as documented when a `@doc` precedes it (`@doc false` included — it is a
deliberate statement that the function has no public documentation) or when it carries
`@impl`, since a callback implementation takes its contract from the behaviour. Only the
first clause of a function needs one; each arity is its own function and wants its own.

## Check-Specific Parameters

*There are no specific parameters for this check.*

## General Parameters

Like with all checks, [general params](`e:credo:check_params.html`) can be applied.

Parameters can be configured via the [`.credo.exs` config file](`e:credo:config_file.html`).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
