def get_all_users() -> list[User]: # Not parsed
...Tree-sitter: function_definition → return_type field.
users = get_all_users() # type: list[User]
for user in users: # user should be: User
user.save() # resolves to: User.save()Regex: list[X] → X, dict[K, V] → V, Optional[X] → X
const users: User[] = getUsers(); // Not parsed
function getUsers(): User[] { ... } // Not parsedTree-sitter: variable_declarator → type field, function_declaration → return_type field.
for (const user of users) { // Not handled
user.save();
}Tree-sitter: for_in_statement with of variant.
User[] → User
Array<User> → Userfor (const user of users) { // Not handled
user.save();
}Same as TypeScript - no loop variable inference.
List<User> users = getUsers();
users.get(0).save(); // Doesn't know get(0) returns UserParse List<User> → extract User for collection method return types.
var users = getUsers(); // type is List<User>, needs inference
var user = users.get(0); // type is User, needs inferenceWhen var is used, infer from right-hand side expression.
Currently returns empty local_var_types. Need to extract explicit types from declarations.
User user = getUser(); // Extract "User" from declaration
user.save(); // Resolve to User::save()
auto user = getUser(); // Needs return type inference (like Java var)Tree-sitter: declaration → type field, init_declarator → declarator field.
Currently returns empty local_var_types. Need to extract explicit types from declarations.
let user: User = get_user(); // Extract "User" from type annotation
user.save(); // Resolve to User::save()
let user = get_user(); // Needs return type inferenceTree-sitter: let_declaration → type field.
Currently returns empty local_var_types. Need to extract explicit types from declarations.
var user User = getUser() // Extract "User" from declaration
user.Save() // Resolve to User.Save()
user := getUser() // Short declaration - needs return type inferenceTree-sitter: var_declaration → type identifier, short_var_declaration needs inference.
No type annotations exist. Current coverage is sufficient for dynamic language.