solidity-language-server 0.1.36

A fast Solidity language server powered by solc and Foundry
Documentation
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

struct Inner {
    uint256 innerField;
}

struct Outer {
    uint256 outerField;
}

interface ISource {
    function fetch() external returns (Inner memory);
}

contract ScopedLocals {
    // Same names as the locals below, different type. A lookup that misses
    // the local's scope falls through to these and offers `outerField`.
    Outer item;
    Outer got;

    function loop(Inner[] memory items) external pure returns (uint256 sum) {
        for (Inner memory it = items[0]; sum < 3; sum++) {
            sum += it.innerField;
        }
    }

    function attempt(ISource src) external returns (uint256 out) {
        try src.fetch() returns (Inner memory go) {
            out = go.innerField;
        } catch {}
    }
}