From 9e1dbfd5302f3ce843e5e6098f2913bb6b143f70 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Fri, 13 Mar 2026 10:52:01 +0000 Subject: [PATCH] Re-enable Credo ModuleDoc check Closes #108 --- .credo.exs | 31 ++++++++++++++++--- lib/brave_search.ex | 4 +++ lib/discogs.ex | 4 +++ lib/last_fm.ex | 4 +++ lib/last_fm/import.ex | 2 ++ lib/last_fm/scrobble.ex | 2 ++ lib/last_fm/session.ex | 2 ++ lib/last_fm/supervisor.ex | 2 ++ lib/music_brainz.ex | 4 +++ lib/music_brainz/artist.ex | 2 ++ lib/music_brainz/external_link.ex | 2 ++ lib/music_brainz/release.ex | 8 +++++ lib/music_brainz/release_group.ex | 2 ++ .../release_group_search_result.ex | 2 ++ lib/music_brainz/release_search_result.ex | 2 ++ lib/music_library/artist_chat.ex | 4 +++ lib/music_library/artists.ex | 4 +++ lib/music_library/artists/batch.ex | 4 +++ lib/music_library/assets.ex | 4 +++ lib/music_library/assets/cache.ex | 4 +++ lib/music_library/assets/image.ex | 4 +++ lib/music_library/assets/transform.ex | 4 +++ lib/music_library/background_repo.ex | 2 ++ lib/music_library/barcode_scan.ex | 4 +++ lib/music_library/barcode_scan/result.ex | 2 ++ lib/music_library/batch.ex | 4 +++ lib/music_library/chat.ex | 4 +++ lib/music_library/collection.ex | 4 +++ lib/music_library/encrypted/binary.ex | 1 + lib/music_library/notes.ex | 4 +++ lib/music_library/record_chat.ex | 4 +++ lib/music_library/record_sets.ex | 4 +++ lib/music_library/records/batch.ex | 4 +++ lib/music_library/records/tracklist_pdf.ex | 4 +++ lib/music_library/scrobble_activity.ex | 4 +++ lib/music_library/secrets.ex | 4 +++ lib/music_library/telemetry_repo.ex | 2 ++ lib/music_library/vault.ex | 1 + lib/music_library/wishlist.ex | 4 +++ lib/music_library_web/auth.ex | 2 ++ lib/music_library_web/hooks/show_toast.ex | 2 ++ lib/music_library_web/live_helpers/params.ex | 2 ++ lib/music_library_web/telemetry/storage.ex | 2 ++ lib/open_ai.ex | 4 +++ lib/open_ai/completion.ex | 2 ++ lib/wikipedia.ex | 4 +++ test/support/color_helpers.ex | 2 ++ test/support/live_test_helpers.ex | 2 ++ 48 files changed, 175 insertions(+), 4 deletions(-) diff --git a/.credo.exs b/.credo.exs index 4ac3efca..25eccbdf 100644 --- a/.credo.exs +++ b/.credo.exs @@ -4,11 +4,34 @@ name: "default", checks: %{ extra: [ - {Credo.Check.Refactor.Nesting, max_nesting: 3} + {Credo.Check.Refactor.Nesting, max_nesting: 3}, + {Credo.Check.Readability.ModuleDoc, + ignore_names: [ + # Credo defaults + ~r/(\.\w+Controller|\.Endpoint|\.\w+Live(\.\w+)?|\.Repo|\.Router|\.\w+Socket|\.\w+View|\.\w+HTML|\.\w+JSON|\.Telemetry|\.Layouts|\.Mailer)$/, + # Custom: external API internals follow a three-module pattern + # where only the facade needs documentation + ~r/\.API(\..*)?$/, + ~r/\.Config$/, + # Custom: test support modules + ~r/Fixtures/, + # Custom: mix tasks + ~r/^Mix\.Tasks\./ + ], + ignore_modules_using: [ + # Credo defaults + Credo.Check, + Ecto.Schema, + Phoenix.LiveView, + ~r/\.Web$/, + # Custom: LiveComponents and Oban workers are self-documenting + Oban.Worker, + # Matches `use MusicLibraryWeb, :live_component` etc. + MusicLibraryWeb + ]}, + {Credo.Check.Refactor.CyclomaticComplexity, max_complexity: 12} ], - disabled: [ - {Credo.Check.Readability.ModuleDoc, []} - ] + disabled: [] } # files etc. } diff --git a/lib/brave_search.ex b/lib/brave_search.ex index d8bea0c7..75292551 100644 --- a/lib/brave_search.ex +++ b/lib/brave_search.ex @@ -1,4 +1,8 @@ defmodule BraveSearch do + @moduledoc """ + Brave Search API facade for cover art and artist image search. + """ + alias BraveSearch.API @spec search_images(String.t(), keyword()) :: {:ok, [map()]} | {:error, term()} diff --git a/lib/discogs.ex b/lib/discogs.ex index 03c3b9ba..ccdf0d1b 100644 --- a/lib/discogs.ex +++ b/lib/discogs.ex @@ -1,4 +1,8 @@ defmodule Discogs do + @moduledoc """ + Discogs API facade for artist profiles and images. + """ + alias Discogs.API @spec get_artist(integer() | String.t()) :: {:ok, map()} | {:error, term()} diff --git a/lib/last_fm.ex b/lib/last_fm.ex index 8ec9bb1c..7c263cc7 100644 --- a/lib/last_fm.ex +++ b/lib/last_fm.ex @@ -1,4 +1,8 @@ defmodule LastFm do + @moduledoc """ + Last.fm API facade for scrobbling and listening history. + """ + alias LastFm.{API, Feed, Refresh, Scrobble, Track, Worker} alias MusicLibrary.{BackgroundRepo, Repo} diff --git a/lib/last_fm/import.ex b/lib/last_fm/import.ex index 66514fb8..fe59868b 100644 --- a/lib/last_fm/import.ex +++ b/lib/last_fm/import.ex @@ -1,4 +1,6 @@ defmodule LastFm.Import do + @moduledoc false + @spec batch(keyword()) :: {:ok, non_neg_integer()} | {:error, term()} def batch(opts) do with {:ok, tracks} <- LastFm.get_tracks(opts) do diff --git a/lib/last_fm/scrobble.ex b/lib/last_fm/scrobble.ex index 9b9804b9..3eda7c90 100644 --- a/lib/last_fm/scrobble.ex +++ b/lib/last_fm/scrobble.ex @@ -1,4 +1,6 @@ defmodule LastFm.Scrobble do + @moduledoc false + defstruct [:track, :artist, :timestamp, :album, :album_artist, :mbid] @type t :: %__MODULE__{ diff --git a/lib/last_fm/session.ex b/lib/last_fm/session.ex index 60244e06..556442ca 100644 --- a/lib/last_fm/session.ex +++ b/lib/last_fm/session.ex @@ -1,4 +1,6 @@ defmodule LastFm.Session do + @moduledoc false + require Record defstruct [:name, :key, :pro] diff --git a/lib/last_fm/supervisor.ex b/lib/last_fm/supervisor.ex index 8e018f5f..cc322001 100644 --- a/lib/last_fm/supervisor.ex +++ b/lib/last_fm/supervisor.ex @@ -1,4 +1,6 @@ defmodule LastFm.Supervisor do + @moduledoc false + use Supervisor def start_link(config) do diff --git a/lib/music_brainz.ex b/lib/music_brainz.ex index 4d96851e..b9c83dad 100644 --- a/lib/music_brainz.ex +++ b/lib/music_brainz.ex @@ -1,4 +1,8 @@ defmodule MusicBrainz do + @moduledoc """ + MusicBrainz API facade for release and artist metadata search. + """ + alias MusicBrainz.API @type search_opts :: [limit: non_neg_integer(), offset: non_neg_integer()] diff --git a/lib/music_brainz/artist.ex b/lib/music_brainz/artist.ex index cbbbb576..814bd3ca 100644 --- a/lib/music_brainz/artist.ex +++ b/lib/music_brainz/artist.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.Artist do + @moduledoc false + @enforce_keys [:id, :name, :sort_name] defstruct [:id, :name, :sort_name, :country, :relations, :musicbrainz_data] diff --git a/lib/music_brainz/external_link.ex b/lib/music_brainz/external_link.ex index 123b8b27..a4386555 100644 --- a/lib/music_brainz/external_link.ex +++ b/lib/music_brainz/external_link.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.ExternalLink do + @moduledoc false + defstruct [:name, :url] @type t :: %__MODULE__{ diff --git a/lib/music_brainz/release.ex b/lib/music_brainz/release.ex index 15a6bb98..b2324bec 100644 --- a/lib/music_brainz/release.ex +++ b/lib/music_brainz/release.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.Release do + @moduledoc false + @enforce_keys [ :id, :title, @@ -38,6 +40,8 @@ defmodule MusicBrainz.Release do } defmodule Artist do + @moduledoc false + @enforce_keys [:id, :name, :sort_name] defstruct [:id, :name, :sort_name] @@ -49,6 +53,8 @@ defmodule MusicBrainz.Release do end defmodule Medium do + @moduledoc false + @enforce_keys [:title, :format, :number, :track_count, :tracks] defstruct [:title, :format, :number, :track_count, :tracks] @@ -62,6 +68,8 @@ defmodule MusicBrainz.Release do end defmodule Track do + @moduledoc false + @enforce_keys [:id, :title, :artists, :length, :number, :position] defstruct [:id, :title, :artists, :length, :number, :position] diff --git a/lib/music_brainz/release_group.ex b/lib/music_brainz/release_group.ex index 5a6bb4e4..6c01667b 100644 --- a/lib/music_brainz/release_group.ex +++ b/lib/music_brainz/release_group.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.ReleaseGroup do + @moduledoc false + alias MusicBrainz.ReleaseGroupSearchResult @spec included_release_groups(map()) :: [ReleaseGroupSearchResult.t()] diff --git a/lib/music_brainz/release_group_search_result.ex b/lib/music_brainz/release_group_search_result.ex index 751c10f6..8b222649 100644 --- a/lib/music_brainz/release_group_search_result.ex +++ b/lib/music_brainz/release_group_search_result.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.ReleaseGroupSearchResult do + @moduledoc false + alias MusicBrainz.ReleaseGroup @enforce_keys [:id, :type, :title, :artists, :release_date] diff --git a/lib/music_brainz/release_search_result.ex b/lib/music_brainz/release_search_result.ex index 49889427..17aff4fb 100644 --- a/lib/music_brainz/release_search_result.ex +++ b/lib/music_brainz/release_search_result.ex @@ -1,4 +1,6 @@ defmodule MusicBrainz.ReleaseSearchResult do + @moduledoc false + alias MusicBrainz.ReleaseGroup @enforce_keys [:id, :title, :release_group, :artists, :date, :barcode, :media] diff --git a/lib/music_library/artist_chat.ex b/lib/music_library/artist_chat.ex index d852e9ce..b2cb689a 100644 --- a/lib/music_library/artist_chat.ex +++ b/lib/music_library/artist_chat.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.ArtistChat do + @moduledoc """ + Chat implementation for artists using OpenAI streaming with Wikipedia context. + """ + @behaviour MusicLibrary.Chat alias MusicLibrary.Artists.ArtistInfo diff --git a/lib/music_library/artists.ex b/lib/music_library/artists.ex index bd590371..9d81d999 100644 --- a/lib/music_library/artists.ex +++ b/lib/music_library/artists.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Artists do + @moduledoc """ + Artist metadata management from MusicBrainz, Discogs, Wikipedia, and Last.fm. + """ + import Ecto.Query, warn: false alias MusicLibrary.Artists.ArtistInfo diff --git a/lib/music_library/artists/batch.ex b/lib/music_library/artists/batch.ex index e1c7bf22..90da9f4e 100644 --- a/lib/music_library/artists/batch.ex +++ b/lib/music_library/artists/batch.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Artists.Batch do + @moduledoc """ + Batch operations for artists: refresh MusicBrainz, Discogs, Wikipedia, and Last.fm data. + """ + import Ecto.Query alias MusicLibrary.Artists diff --git a/lib/music_library/assets.ex b/lib/music_library/assets.ex index 9bd1c8a0..617a9508 100644 --- a/lib/music_library/assets.ex +++ b/lib/music_library/assets.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Assets do + @moduledoc """ + Binary asset storage and retrieval for covers and artist images. + """ + alias MusicLibrary.Assets.{Asset, Cache} alias MusicLibrary.Repo diff --git a/lib/music_library/assets/cache.ex b/lib/music_library/assets/cache.ex index aff33c7c..7671c035 100644 --- a/lib/music_library/assets/cache.ex +++ b/lib/music_library/assets/cache.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Assets.Cache do + @moduledoc """ + ETS-based asset cache with TTL for serving frequently accessed images. + """ + @spec new() :: :ets.table() def new do :ets.new(__MODULE__, [:named_table, :public, :compressed, read_concurrency: true]) diff --git a/lib/music_library/assets/image.ex b/lib/music_library/assets/image.ex index ef140611..daa2844d 100644 --- a/lib/music_library/assets/image.ex +++ b/lib/music_library/assets/image.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Assets.Image do + @moduledoc """ + Image processing via Vix (libvips) for covers and artist images. + """ + alias Vix.Vips.{Image, Operation} fallback_path = Application.app_dir(:music_library, ["priv", "image-not-found.jpg"]) diff --git a/lib/music_library/assets/transform.ex b/lib/music_library/assets/transform.ex index f15fc685..eb342dde 100644 --- a/lib/music_library/assets/transform.ex +++ b/lib/music_library/assets/transform.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Assets.Transform do + @moduledoc """ + Represents an image transformation (hash + target width) for asset serving. + """ + @derive JSON.Encoder defstruct [:hash, :width] diff --git a/lib/music_library/background_repo.ex b/lib/music_library/background_repo.ex index 89a49a36..cf06a9ba 100644 --- a/lib/music_library/background_repo.ex +++ b/lib/music_library/background_repo.ex @@ -1,4 +1,6 @@ defmodule MusicLibrary.BackgroundRepo do + @moduledoc false + use Ecto.Repo, otp_app: :music_library, adapter: Ecto.Adapters.SQLite3 diff --git a/lib/music_library/barcode_scan.ex b/lib/music_library/barcode_scan.ex index 861cf54f..61ea6afb 100644 --- a/lib/music_library/barcode_scan.ex +++ b/lib/music_library/barcode_scan.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.BarcodeScan do + @moduledoc """ + Barcode-to-MusicBrainz lookup workflow. + """ + alias MusicLibrary.BarcodeScan.Result alias MusicLibrary.Records diff --git a/lib/music_library/barcode_scan/result.ex b/lib/music_library/barcode_scan/result.ex index 5b3caa96..27d85f3f 100644 --- a/lib/music_library/barcode_scan/result.ex +++ b/lib/music_library/barcode_scan/result.ex @@ -1,4 +1,6 @@ defmodule MusicLibrary.BarcodeScan.Result do + @moduledoc false + defstruct [:status, :number, :record_id, :release] @type t :: %__MODULE__{ diff --git a/lib/music_library/batch.ex b/lib/music_library/batch.ex index 4d24db50..b0ba28b7 100644 --- a/lib/music_library/batch.ex +++ b/lib/music_library/batch.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Batch do + @moduledoc """ + Generic batch runner: streams records through a transaction with error accumulation. + """ + alias MusicLibrary.Repo require Logger diff --git a/lib/music_library/chat.ex b/lib/music_library/chat.ex index f0b3a2c1..caa4c163 100644 --- a/lib/music_library/chat.ex +++ b/lib/music_library/chat.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Chat do + @moduledoc """ + Behaviour for streaming AI chat with entity-specific context. + """ + @callback stream_response( messages :: list(map()), context :: term(), diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex index b8d421f0..1de5d634 100644 --- a/lib/music_library/collection.ex +++ b/lib/music_library/collection.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Collection do + @moduledoc """ + Queries for collected records (where `purchased_at` is set). + """ + import Ecto.Query, warn: false import MusicLibrary.Records, only: [order_alphabetically: 0] diff --git a/lib/music_library/encrypted/binary.ex b/lib/music_library/encrypted/binary.ex index 8ca1c59f..97ef06af 100644 --- a/lib/music_library/encrypted/binary.ex +++ b/lib/music_library/encrypted/binary.ex @@ -1,3 +1,4 @@ defmodule MusicLibrary.Encrypted.Binary do + @moduledoc false use Cloak.Ecto.Binary, vault: MusicLibrary.Vault end diff --git a/lib/music_library/notes.ex b/lib/music_library/notes.ex index 16c9ffc2..40418548 100644 --- a/lib/music_library/notes.ex +++ b/lib/music_library/notes.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Notes do + @moduledoc """ + Free-text notes attached to records and artists. + """ + alias MusicLibrary.Notes.Note alias MusicLibrary.Repo diff --git a/lib/music_library/record_chat.ex b/lib/music_library/record_chat.ex index 51a169c1..4ea0a9b5 100644 --- a/lib/music_library/record_chat.ex +++ b/lib/music_library/record_chat.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.RecordChat do + @moduledoc """ + Chat implementation for records using OpenAI streaming with web search. + """ + @behaviour MusicLibrary.Chat alias MusicLibrary.Records.Record diff --git a/lib/music_library/record_sets.ex b/lib/music_library/record_sets.ex index 0b15cfa4..e8fb689c 100644 --- a/lib/music_library/record_sets.ex +++ b/lib/music_library/record_sets.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.RecordSets do + @moduledoc """ + User-curated record groupings with ordered items. + """ + import Ecto.Query, warn: false alias MusicLibrary.RecordSets.{RecordSet, RecordSetItem} diff --git a/lib/music_library/records/batch.ex b/lib/music_library/records/batch.ex index 82cceef8..4e71c939 100644 --- a/lib/music_library/records/batch.ex +++ b/lib/music_library/records/batch.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Records.Batch do + @moduledoc """ + Batch operations for records: refresh MusicBrainz data and generate embeddings. + """ + import Ecto.Query alias MusicLibrary.Batch diff --git a/lib/music_library/records/tracklist_pdf.ex b/lib/music_library/records/tracklist_pdf.ex index ea458334..2388b34d 100644 --- a/lib/music_library/records/tracklist_pdf.ex +++ b/lib/music_library/records/tracklist_pdf.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Records.TracklistPdf do + @moduledoc """ + Generates 120mm x 120mm PDF tracklists from record and release data via Typst. + """ + alias MusicBrainz.Release alias MusicLibraryWeb.Duration alias Typst.Format diff --git a/lib/music_library/scrobble_activity.ex b/lib/music_library/scrobble_activity.ex index 0e2575e8..b7d3038a 100644 --- a/lib/music_library/scrobble_activity.ex +++ b/lib/music_library/scrobble_activity.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.ScrobbleActivity do + @moduledoc """ + Scrobbling releases, media, and tracks to Last.fm. + """ + alias LastFm.Scrobble alias MusicBrainz.Release alias MusicLibrary.Secrets diff --git a/lib/music_library/secrets.ex b/lib/music_library/secrets.ex index da1e0279..332421f5 100644 --- a/lib/music_library/secrets.ex +++ b/lib/music_library/secrets.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Secrets do + @moduledoc """ + Encrypted key-value storage for API keys and credentials. + """ + alias MusicLibrary.Repo alias MusicLibrary.Secrets.Secret diff --git a/lib/music_library/telemetry_repo.ex b/lib/music_library/telemetry_repo.ex index 46e8a6c1..59550e74 100644 --- a/lib/music_library/telemetry_repo.ex +++ b/lib/music_library/telemetry_repo.ex @@ -1,4 +1,6 @@ defmodule MusicLibrary.TelemetryRepo do + @moduledoc false + use Ecto.Repo, otp_app: :music_library, adapter: Ecto.Adapters.SQLite3 diff --git a/lib/music_library/vault.ex b/lib/music_library/vault.ex index 82b12104..75f2d752 100644 --- a/lib/music_library/vault.ex +++ b/lib/music_library/vault.ex @@ -1,3 +1,4 @@ defmodule MusicLibrary.Vault do + @moduledoc false use Cloak.Vault, otp_app: :music_library end diff --git a/lib/music_library/wishlist.ex b/lib/music_library/wishlist.ex index 53693145..317cee5c 100644 --- a/lib/music_library/wishlist.ex +++ b/lib/music_library/wishlist.ex @@ -1,4 +1,8 @@ defmodule MusicLibrary.Wishlist do + @moduledoc """ + Queries for wishlisted records (where `purchased_at` is nil). + """ + import Ecto.Query, warn: false alias MusicLibrary.Records diff --git a/lib/music_library_web/auth.ex b/lib/music_library_web/auth.ex index 14ce9dd7..ad106bd8 100644 --- a/lib/music_library_web/auth.ex +++ b/lib/music_library_web/auth.ex @@ -1,4 +1,6 @@ defmodule MusicLibraryWeb.Auth do + @moduledoc false + use Gettext, backend: MusicLibraryWeb.Gettext import LiveToast, only: [put_toast: 3] diff --git a/lib/music_library_web/hooks/show_toast.ex b/lib/music_library_web/hooks/show_toast.ex index e96fde67..2e66a3ca 100644 --- a/lib/music_library_web/hooks/show_toast.ex +++ b/lib/music_library_web/hooks/show_toast.ex @@ -1,4 +1,6 @@ defmodule MusicLibraryWeb.Hooks.ShowToast do + @moduledoc false + import Phoenix.LiveView import LiveToast, only: [put_toast: 3] diff --git a/lib/music_library_web/live_helpers/params.ex b/lib/music_library_web/live_helpers/params.ex index 4bfaf928..e78be2c7 100644 --- a/lib/music_library_web/live_helpers/params.ex +++ b/lib/music_library_web/live_helpers/params.ex @@ -1,4 +1,6 @@ defmodule MusicLibraryWeb.LiveHelpers.Params do + @moduledoc false + @pagination Application.compile_env!(:music_library, :pagination) @spec parse_page(String.t() | nil | term()) :: pos_integer() diff --git a/lib/music_library_web/telemetry/storage.ex b/lib/music_library_web/telemetry/storage.ex index 427aefa1..a1f01cde 100644 --- a/lib/music_library_web/telemetry/storage.ex +++ b/lib/music_library_web/telemetry/storage.ex @@ -1,4 +1,6 @@ defmodule MusicLibraryWeb.Telemetry.Storage do + @moduledoc false + use GenServer @buffer_size Application.compile_env( diff --git a/lib/open_ai.ex b/lib/open_ai.ex index 76bd26a3..59eb3b19 100644 --- a/lib/open_ai.ex +++ b/lib/open_ai.ex @@ -1,4 +1,8 @@ defmodule OpenAI do + @moduledoc """ + OpenAI API facade for text embeddings and streaming chat. + """ + alias OpenAI.API @type chat_stream_opts :: [ diff --git a/lib/open_ai/completion.ex b/lib/open_ai/completion.ex index 214a157e..39374ca4 100644 --- a/lib/open_ai/completion.ex +++ b/lib/open_ai/completion.ex @@ -1,4 +1,6 @@ defmodule OpenAI.Completion do + @moduledoc false + @enforce_keys [:content] defstruct content: "", temperature: 0.2, diff --git a/lib/wikipedia.ex b/lib/wikipedia.ex index 776894d3..e16f5a88 100644 --- a/lib/wikipedia.ex +++ b/lib/wikipedia.ex @@ -1,4 +1,8 @@ defmodule Wikipedia do + @moduledoc """ + Wikipedia API facade for artist biographies. + """ + alias Wikipedia.API @spec get_artist_summary(String.t()) :: {:ok, map()} | {:error, :no_english_wikipedia | term()} diff --git a/test/support/color_helpers.ex b/test/support/color_helpers.ex index 5621666d..4f335127 100644 --- a/test/support/color_helpers.ex +++ b/test/support/color_helpers.ex @@ -1,4 +1,6 @@ defmodule MusicLibrary.ColorHelpers do + @moduledoc false + @doc """ Returns true if the given string is a valid lowercase hex color code. diff --git a/test/support/live_test_helpers.ex b/test/support/live_test_helpers.ex index 13d9b760..5d8e6324 100644 --- a/test/support/live_test_helpers.ex +++ b/test/support/live_test_helpers.ex @@ -1,4 +1,6 @@ defmodule MusicLibraryWeb.LiveTestHelpers do + @moduledoc false + def escape(string) do LazyHTML.html_escape(string) end