ClaudeCodeMod

All shelves / Skills

dart-write-documentation

flutter/agent-plugins · 6.5k installs · 3.1K stars

Skill

Install

In your shell
npx -y skills add flutter/agent-plugins --skill dart-write-documentation --agent claude-code

Run in a terminal. Claude loads the skill when a task calls for it. Check the repo's README before you run it.

Open the repo

Files

SKILL.md

Writing Dart API Documentation

Contents

When asked to write or update documentation for Dart code, you must strictly follow these formatting rules based on the "Effective Dart: Documentation" guidelines.

1. Scope and Structure

  • Target Public APIs: Focus your documentation efforts on public declarations. Do not document private members (those starting with an underscore _) unless explicitly instructed, as they do not appear in generated API reference sites.
  • Always use ///: Use /// consecutive line comments for all API documentation. Never use /** ... */ block comments.
  • Proper Sentences: Format all comments like proper sentences. Capitalize the first word (unless it's a lowercase identifier) and end with a period.
  • The First Paragraph: The first paragraph of a doc comment must be a single, concise sentence that summarizes the element. End it with a period. Dartdoc extracts this verbatim for list views.
  • Separation: Always separate the first sentence summary from the rest of the documentation with a blank line containing ///. Never output a completely empty newline (e.g., a \n without ///), as this terminates the doc comment block.

2. Tone and Openers

  • Noun phrases for properties: Start descriptions of variables, getters, or setters with a noun phrase. /// The radius of the sphere. (Not "Gets the radius...")
  • "Whether" for booleans: Start documentation for boolean properties with "Whether". /// Whether the connection is active.
  • Third-person verbs for methods: Start descriptions of methods or functions with a third-person verb that describes what it does. /// Initializes the database. (Not "Initialize" or "This method initializes").
  • Avoid redundancy: Do not restate the signature or the element name. Do not say "This class is a..." or "The foo method does...".

3. Strict Anti-Patterns (Banned)

  • No Javadoc/TSDoc Tags (@param, @return, @throws, etc.): Never use Javadoc-style tags (@param, @return, @returns, @throws, @exception, @see, @type). Instead, weave parameter names, return behavior, and exceptions into the prose.

4. Technical Placement & Resolution

  • Annotations (@override, etc.): Doc comments must be placed before metadata annotations.
  • Inherited Documentation: Avoid duplicating doc comments on @override members if the behavior does not differ from the superclass or interface. Dartdoc automatically inherits the base documentation.
  • Getter/Setter Pairs: If a property has both a getter and a setter, place the documentation only on the getter. Tooling will emit a warning if both are documented.
  • Default Constructors: To link to a default, unnamed constructor in doc comments, you must use the .new syntax (e.g., [ClassName.new]).

5. Linking and Markdown

  • Square brackets ([identifier]) for in-scope symbols: Use square brackets to link to any in-scope identifier (parameters, classes, methods, fields, and top-level functions) so dartdoc can resolve them. Never use backticks for parameters.
  • No parentheses in method links: Avoid parentheses in links (e.g., use [String.contains], not [String.contains()]).
  • Backticks for keywords & literals: Use backticks for keywords, literals, and arbitrary expressions (e.g. `null`, `true`, `void`). Never put keywords in square brackets (avoid [null] or [true]).
  • Out-of-Scope Links: If you need to link to a symbol that is not imported by the current library, use the @docImport directive at the top of the file (on the library; declaration) rather than adding a standard import.
  • Code Blocks: For code samples, always label the language fence. Use ```dart for Dart, or ```sh for shell commands. Do not leave code blocks unlabelled, as Dartdoc will attempt to auto-detect the language and frequently guesses wrong.
  • Formatting: Use standard Markdown (bold, lists, etc.) after the first paragraph to fully explain edge cases, exceptions thrown, and internal behavior the caller cannot see.

6. Verification

After writing or updating doc comments:

  1. Run dart analyze to ensure all bracketed references resolve properly without triggering comment_references warnings.
  2. (Optional) Run dart doc to verify the generated documentation renders cleanly.

Examples

1. Banned Tags vs. Prose

Bad:

/// This method fetches data.
/// @param force true to force reload.
/// @return the data
/// @throws NetworkException if host is unreachable.
Data load(bool force) { ... }

Good:

/// Fetches the remote data.
///
/// If [force] is true, this bypasses the local cache and forces a
/// network request.
///
/// Throws a [NetworkException] if the host is unreachable.
Data load(bool force) { ... }

2. The Annotation Placement Trap

Bad:

@override
/// Renders the widget to the screen.
Widget build(BuildContext context) { ... }

Good:

/// Renders the widget to the screen.
@override
Widget build(BuildContext context) { ... }

3. Openers and Tone

Bad:

/// Gets if the connection is active.
bool get isActive => _active;

/// This method initializes the connection.
void init() { ... }

Good:

/// Whether the connection is active.
bool get isActive => _active;

/// Initializes the connection.
void init() { ... }

4. Constructor Linking

Bad:

/// Creates a new user. Similar to calling [User()].
User.create() { ... }

Good:

/// Creates a new user. Similar to calling [User.new].
User.create() { ... }

5. Out-of-Scope Links (@docImport)

Bad:

import 'package:http/http.dart'; // Adds unnecessary runtime dependency just for docs

/// To use this, you must pass a [Client].

Good:

/// @docImport 'package:http/http.dart';
library;

/// To use this, you must pass a [Client].

Facts

Kind
Skill
Repo
flutter/agent-plugins
Group
Uncategorized
Installs
6.5k
Stars
3.1K

More on this shelf

  1. 1find-skillsvercel-labs/skillsHelps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.3.8M
  2. 2grill-memattpocock/skillsA relentless interview to sharpen a plan or design.1.3M
  3. 3grill-with-docsmattpocock/skillsA relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.1.1M
  4. 4agent-browservercel-labs/agent-browserBrowser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.1.1M
  5. 5improve-codebase-architecturemattpocock/skillsScan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.1.1M
  6. 6tddmattpocock/skillsTest-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.1.1M