// config: docs_style = "line"
pragma solidity ^0.8.13;

/// @title A Hello world example
contract HelloWorld {
    /// Some example struct
    struct Person {
        uint256 age;
        address wallet;
    }

    /// Here's a more double asterix comment
    Person public theDude;

    /// Will this long comment be wrapped leaving
    /// orphan words?
    Person public anotherDude;

    /// Constructs the dude
    /// @param age The dude's age
    constructor(uint256 age) {
        theDude = Person({age: age, wallet: msg.sender});
    }

    /// @dev does nothing
    function example() public {
        /// Does this add a whitespace error?
        ///
        /// Let's find out.
    }

    /// @dev Calculates a rectangle's surface and perimeter.
    /// @param w Width of the rectangle.
    /// @param h Height of the rectangle.
    /// @return s The calculated surface.
    /// @return p The calculated perimeter.
    function rectangle(uint256 w, uint256 h)
        public
        pure
        returns (uint256 s, uint256 p)
    {
        s = w * h;
        p = 2 * (w + h);
    }

    /// A long doc line comment that will be wrapped
    function docLineOverflow() external {}

    /// @dev No-ops are allowed. No-ops are allowed. No-ops are allowed. No-ops are allowed. No-ops are allowed. No-ops are allowed.
    /// @dev Zero checks are not systematically performed.
    function adjacentDocTagsOverflow() external {}

    function docLinePostfixOverflow() external {}

    /// A long doc line comment that will be wrapped

    /// @notice Here is my comment
    ///       - item 1
    ///       - item 2
    /// Some equations:
    ///     y = mx + b
    function anotherExample() external {}

    /// contract A {
    ///     function foo() public {
    ///         // does nothing.
    ///     }
    /// }
    function multilineIndent() external {}

    /// contract A {
    /// function foo() public {
    ///             // does nothing.
    ///   }
    /// }
    function multilineMalformedIndent() external {}

    /// contract A {
    /// function withALongNameThatWillCauseCommentWrap() public {
    ///             // does nothing.
    ///   }
    /// }
    function malformedIndentOverflow() external {}
}

/// contract A {
///     function foo() public {
///         // does nothing.
///     }
/// }
function freeFloatingMultilineIndent() {}
