Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

v0.1.30

Call hierarchy, go to implementation, qualifier-aware references, and a massive performance overhaul.

Call hierarchy

Full call hierarchy support is here: prepareCallHierarchy, incomingCalls, and outgoingCalls. Navigate call graphs across contracts and libraries.

Tracks function calls, modifier invocations, and base constructor specifiers. Container aggregation means incoming/outgoing on a contract gives you the union of all its callables. Narrow fromRanges use expression.src for direct calls and memberLocation for member-access calls.

Go to implementation

textDocument/implementation jumps from interface or abstract function declarations to their concrete implementations. Builds a bidirectional base_function_implementation index from solc's baseFunctions / baseModifiers AST fields at cache time.

Interface/implementation equivalence

"Find All References" on PoolManager.swap now also returns call sites that reference IPoolManager.swap, and vice versa. Incoming callers via interface-typed references (e.g. manager.swap() where manager is IPoolManager) are included too.

Qualifier-aware navigation

Clicking the qualifier in a qualified type path now works:

Pool.State memory state = pool.getState();
//   ^ Go to Definition on "Pool" navigates to the contract/library

"Find All References" on a container includes qualified type paths where it appears as a prefix.

PathInterner — stable cross-build file IDs

Solc assigns file IDs sequentially based on input order, causing cross-compilation reference bugs. The new PathInterner assigns deterministic canonical IDs so all builds share the same ID space.

Two-phase project index

Phase 1 compiles the src-closure for fast time-to-first-reference. Phase 2 compiles the full closure (src + test + script) in the background.

Parallel sub-cache compilation

Library sub-projects now build concurrently via JoinSet:

ProjectBeforeAfterSpeedup
SmarDex (510 files)~56s8.9s6.3x
Asyncswap (108 + 1108 lib)~57s22.1s2.6x

Gas estimates removed

evm.gasEstimates consumed 88% of compile time. Removed entirely — SmarDex went from 56s to 6s just from dropping gas estimation from solc output selection.

Upgrade

cargo install solidity-language-server