Module: Yard::Lint::Validators::Documentation::UndocumentedObjects

Defined in:
lib/yard/lint/validators/documentation/undocumented_objects.rb,
lib/yard/lint/validators/documentation/undocumented_objects/config.rb,
lib/yard/lint/validators/documentation/undocumented_objects/parser.rb,
lib/yard/lint/validators/documentation/undocumented_objects/result.rb,
lib/yard/lint/validators/documentation/undocumented_objects/validator.rb,
lib/yard/lint/validators/documentation/undocumented_objects/messages_builder.rb

Overview

Note:

Exact name matching excludes the method with **any arity**. If you need arity-specific exclusions, use arity notation instead.

Note:

Arity counts total parameters (required + optional) excluding splat (*) and block (&) parameters.

UndocumentedObjects validator

Checks for missing documentation on classes, modules, and methods. This validator supports flexible method exclusions through the ‘ExcludedMethods` configuration option.

## Pattern Types

The ‘ExcludedMethods` feature supports three pattern types for maximum flexibility:

### 1. Exact Name Matching

Excludes methods with the specified name, regardless of arity:

ExcludedMethods:
  - 'to_s'           # Excludes ALL to_s methods regardless of parameters
  - 'inspect'        # Excludes ALL inspect methods

### 2. Arity Notation (method_name/N)

Excludes methods with specific parameter counts:

ExcludedMethods:
  - 'initialize/0'   # Only excludes initialize with NO parameters (default)
  - 'call/1'         # Only excludes call methods with exactly 1 parameter
  - 'initialize/2'   # Only excludes initialize with exactly 2 parameters

### 3. Regex Patterns

Excludes methods matching a regular expression:

ExcludedMethods:
  - '/^_/'           # Excludes all methods starting with underscore (private convention)
  - '/^test_/'       # Excludes all test methods
  - '/_(helper|util)$/' # Excludes methods ending with _helper or _util

## Configuration Examples

### Minimal setup - Only exclude parameter-less initialize

Documentation/UndocumentedObjects:
  ExcludedMethods:
    - 'initialize/0'

### Common Rails/Ruby patterns

Documentation/UndocumentedObjects:
  ExcludedMethods:
    - 'initialize/0'       # Parameter-less constructors
    - '/^_/'               # Private methods (by convention)
    - 'to_s'               # String conversion
    - 'inspect'            # Object inspection
    - 'hash'               # Hash code generation
    - 'eql?'               # Equality comparison
    - '=='                 # Binary equality operator
    - '<=>'                # Spaceship operator (comparison)
    - '+'                  # Addition operator
    - '-'                  # Subtraction operator
    - '+@'                 # Unary plus operator
    - '-@'                 # Unary minus operator

### Test framework exclusions

Documentation/UndocumentedObjects:
  ExcludedMethods:
    - '/^test_/'           # Minitest methods
    - '/^should_/'         # Shoulda methods
    - 'setup/0'            # Setup with no params
    - 'teardown/0'         # Teardown with no params

## Pattern Validation & Edge Cases

The ‘ExcludedMethods` feature includes robust validation and error handling:

**Automatic Pattern Sanitization:**

  • **Nil values** are automatically removed

  • **Empty strings** and whitespace-only patterns are filtered out

  • **Whitespace trimming** is applied to all patterns

  • **Empty regex patterns** (‘//`) are rejected (would match everything)

  • **Non-array values** are automatically converted to arrays

**Invalid Pattern Handling:**

  • **Invalid regex patterns** (e.g., ‘/[/`, `/(unclosed`) are silently skipped without crashing

  • **Invalid arity notation** (e.g., ‘method/abc`, `method/`) is silently skipped

  • **Pattern matching is case-sensitive** for both exact names and regex

**Operator Method Support:** YARD-Lint fully supports Ruby operator methods including:

  • Binary operators: ‘+`, `-`, `*`, `/`, `%`, `**`, `==`, `!=`, `===`, `<`, `>`, `<=`, `>=`, `<=>`, `&`, `|`, `^`, `<<`, `>>`

  • Unary operators: ‘+@`, `-@`, `!`, `~`

  • Other special methods: ‘[]`, `[]=`, `=~`

**Pattern Matching Behavior:**

  • **Any match excludes**: If a method matches any pattern, it is excluded from validation

  • **Patterns are evaluated in order** as defined in the configuration

  • **Exact names have no arity restriction**: ‘’initialize’‘ excludes all initialize methods, regardless of parameters

  • **Arity notation is strict**: ‘’initialize/0’‘ only excludes initialize with exactly 0 parameters

## Troubleshooting

### Methods still showing as undocumented

  1. Verify the method name matches exactly (case-sensitive)

  2. Check if you’re using arity notation - ensure the arity count is correct

  3. For regex patterns, test your regex independently to ensure it matches

  4. Remember: Arity counts ‘required + optional` parameters, excluding splat (`*args`) and block (`&block`)

### Regex patterns not working

  1. Ensure you’re using ‘/pattern/` format with forward slashes

  2. Test the regex in Ruby: ‘Regexp.new(’your_pattern’).match?(‘method_name’)‘

  3. Escape special regex characters: ‘.`, `(`, `)`, `[`, `]`, etc.

  4. Invalid regex patterns are silently skipped - check for syntax errors

### Arity not matching

  1. Count parameters correctly: ‘def method(a, b = 1)` has arity 2 (required + optional)

  2. Splat parameters don’t count: ‘def method(a, *rest)` has arity 1

  3. Block parameters don’t count: ‘def method(a, &block)` has arity 1

  4. Keyword arguments count as individual parameters: ‘def method(a:, b:)` has arity 2

Defined Under Namespace

Classes: Config, MessagesBuilder, Parser, Result, Validator