Table of Contents

Namespace RDCore.SDK.Model.Symbols

Classes

CompositeSymbolResolver

Chains ISymbolResolvers: Resolve(string, ScopeKind, Uri) tries each in order and returns the first result that is not IsUnbound — a bound symbol, or an error result (a duplicate or ambiguous name found by an earlier resolver is not masked by a later fallback). The result is unbound only when every resolver is unbound.

DeferredSymbol

A BoundSymbol that is inferred from an unbound expression and accessible to IntelliSense and analyzers, but not yet materialized in source code.

GlobalSymbols
GlobalSymbols.ExtensionSymbols

Defines a number of static (unallocated) symbols used internally for semantic purposes.

GlobalSymbols.OperatorSymbols
GlobalSymbols.StaticSymbols
LexicalScope

One lexical scope of a composed workspace — a compile-time region a name lookup starts from and then walks outward, through the Parent chain, until the name binds or the global scope is reached (MS-VBAL §5.2 Name Binding, RD-VBAL §2.3.1.2).

PrecompilerConstantSymbol

A project-level conditional-compilation constant (MS-VBAL §3.4.1) — supplied by the .rdproj or a --define argument, and shadowed by a module's own #Const.

ReferencePriorityInfo

One entry in a workspace's ordered reference list, as the runtime sees it: a reference's source-visible name and its position in that list. Nothing more — a referenced library's members are not carried here. They are contributed by an ISymbolProvider and resolved through ISymbolResolver like any other symbol (today the VBA intrinsics come from the environment host; a dedicated library scope tier is planned). This type exists only so a name-resolution pass can break a cross-reference tie by list position.

ScopeTree

The lexical-scope tree of a composed set of symbols: a Global scope at the root, a scope per module, and a scope per procedure body. Built by ScopeTreeBuilder; the static and run-time name resolvers walk it to bind an identifier (RD-VBAL §2.3.1.2).

ScopeTreeBuilder

Builds a ScopeTree from a flat set of composed symbols. Placement is structural — a symbol's concrete type, its ParentUri, and its access modifier decide its scope:

  • module symbols, project-level precompiler constants, global StaticSymbols, and anything the tree cannot otherwise place → the Global scope;
  • a standard module's non-Private members → the project scope, where sibling modules see them;
  • every module's members — fields, constants, procedures, properties, enums, user-defined types, events, Declares → that module's own scope;
  • a procedure's parameters and its procedure-local Dim / Static / Const (and the dynamic array a bare ReDim introduces) → that procedure's scope.

Enum members and user-defined-type fields are reached through member access, not lexical scoping, so they are not placed in the tree. Unqualified enum-member visibility, and ordering referenced libraries by their .rdproj priority within the global scope, are later work.

ScopeTreeSymbolResolver

The compile-time ISymbolResolver: binds an identifier by walking a ScopeTree outward from the scope a lookup originates in — the first scope that declares the name binds it (MS-VBAL §5.2 name binding, RD-VBAL §2.3.1.2). A name declared more than once in a single module or procedure scope resolves as Duplicate(IEnumerable<Symbol>); more than once at the project or global tier resolves as Ambiguous(IEnumerable<Symbol>).

VBClassModuleSymbol

An unbound symbol representing a class module.

VBLocalConstantSymbol

A TypedSymbol representing a procedure-local Const declaration (MS-VBAL §5.4.3.2). A local constant statically evaluates to a value of a fixed VBType, is visible only within its declaring procedure, and cannot be assigned at run-time; a module-level Const is modelled by VBConstantMemberSymbol and an Enum member by VBEnumConstMemberSymbol.

VBLocalVariableSymbol

A TypedSymbol representing any local variable.

VBModuleSymbol

An unbound symbol representing any type of module.

VBStandardModuleSymbol

An unbound symbol representing a standard module.

VBStaticLocalVariableSymbol

Represents a semantically Static local variable symbol.

Structs

ModuleDirectives

The resolved module-level directives a VBModuleSymbol was declared under — the Option ... statements (MS-VBAL §5.2.1) and Attribute VB_... declarations (MS-VBAL §4.2) a static-semantics pass needs to know about, plus RD-VBA's own annotation-driven dials (Option Strict).

Enums

LexicalScopeKind

The tier of a LexicalScope in the resolution tree. Distinct from ScopeKind, which says where a symbol is allocated, not where a name binds. A lookup walks these outward: ProcedureModuleProjectGlobal (RD-VBAL §2.3.1.2).

LocalDeclarationKind

How a VBLocalVariableSymbol first entered its procedure scope.