mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:16 +00:00
[ty] IDE: add support for object.<CURSOR>
completions (#18468)
This PR adds logic for detecting `Name Dot [Name]` token patterns, finding the corresponding `ExprAttribute`, getting the type of the object and returning the members available on that object. Here's a video demonstrating this working: https://github.com/user-attachments/assets/42ce78e8-5930-4211-a18a-fa2a0434d0eb Ref astral-sh/ty#86
This commit is contained in:
parent
c0bb83b882
commit
55100209c7
6 changed files with 437 additions and 24 deletions
|
@ -41,12 +41,18 @@ impl<'db> SemanticModel<'db> {
|
|||
resolve_module(self.db, module_name)
|
||||
}
|
||||
|
||||
/// Returns completions for symbols available in a `object.<CURSOR>` context.
|
||||
pub fn attribute_completions(&self, node: &ast::ExprAttribute) -> Vec<Name> {
|
||||
let ty = node.value.inferred_type(self);
|
||||
crate::types::all_members(self.db, ty).into_iter().collect()
|
||||
}
|
||||
|
||||
/// Returns completions for symbols available in the scope containing the
|
||||
/// given expression.
|
||||
///
|
||||
/// If a scope could not be determined, then completions for the global
|
||||
/// scope of this model's `File` are returned.
|
||||
pub fn completions(&self, node: ast::AnyNodeRef<'_>) -> Vec<Name> {
|
||||
pub fn scoped_completions(&self, node: ast::AnyNodeRef<'_>) -> Vec<Name> {
|
||||
let index = semantic_index(self.db, self.file);
|
||||
|
||||
// TODO: We currently use `try_expression_scope_id` here as a hotfix for [1].
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue