mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-30 11:36:57 +00:00 
			
		
		
		
	[ty] improve goto/hover for definitions (#19976)
	
		
			
	
		
	
	
		
	
		
			Some checks are pending
		
		
	
	
		
			
				
	
				CI / Determine changes (push) Waiting to run
				
			
		
			
				
	
				CI / cargo fmt (push) Waiting to run
				
			
		
			
				
	
				CI / cargo clippy (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo test (linux) (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo test (linux, release) (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo test (windows) (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo test (wasm) (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo build (release) (push) Waiting to run
				
			
		
			
				
	
				CI / cargo build (msrv) (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo fuzz build (push) Blocked by required conditions
				
			
		
			
				
	
				CI / fuzz parser (push) Blocked by required conditions
				
			
		
			
				
	
				CI / test scripts (push) Blocked by required conditions
				
			
		
			
				
	
				CI / ecosystem (push) Blocked by required conditions
				
			
		
			
				
	
				CI / Fuzz for new ty panics (push) Blocked by required conditions
				
			
		
			
				
	
				CI / cargo shear (push) Blocked by required conditions
				
			
		
			
				
	
				CI / python package (push) Waiting to run
				
			
		
			
				
	
				CI / pre-commit (push) Waiting to run
				
			
		
			
				
	
				CI / mkdocs (push) Waiting to run
				
			
		
			
				
	
				CI / formatter instabilities and black similarity (push) Blocked by required conditions
				
			
		
			
				
	
				CI / test ruff-lsp (push) Blocked by required conditions
				
			
		
			
				
	
				CI / check playground (push) Blocked by required conditions
				
			
		
			
				
	
				CI / benchmarks-instrumented (push) Blocked by required conditions
				
			
		
			
				
	
				CI / benchmarks-walltime (push) Blocked by required conditions
				
			
		
			
				
	
				[ty Playground] Release / publish (push) Waiting to run
				
			
		
		
	
	
				
					
				
			
		
			Some checks are pending
		
		
	
	CI / Determine changes (push) Waiting to run
				
			CI / cargo fmt (push) Waiting to run
				
			CI / cargo clippy (push) Blocked by required conditions
				
			CI / cargo test (linux) (push) Blocked by required conditions
				
			CI / cargo test (linux, release) (push) Blocked by required conditions
				
			CI / cargo test (windows) (push) Blocked by required conditions
				
			CI / cargo test (wasm) (push) Blocked by required conditions
				
			CI / cargo build (release) (push) Waiting to run
				
			CI / cargo build (msrv) (push) Blocked by required conditions
				
			CI / cargo fuzz build (push) Blocked by required conditions
				
			CI / fuzz parser (push) Blocked by required conditions
				
			CI / test scripts (push) Blocked by required conditions
				
			CI / ecosystem (push) Blocked by required conditions
				
			CI / Fuzz for new ty panics (push) Blocked by required conditions
				
			CI / cargo shear (push) Blocked by required conditions
				
			CI / python package (push) Waiting to run
				
			CI / pre-commit (push) Waiting to run
				
			CI / mkdocs (push) Waiting to run
				
			CI / formatter instabilities and black similarity (push) Blocked by required conditions
				
			CI / test ruff-lsp (push) Blocked by required conditions
				
			CI / check playground (push) Blocked by required conditions
				
			CI / benchmarks-instrumented (push) Blocked by required conditions
				
			CI / benchmarks-walltime (push) Blocked by required conditions
				
			[ty Playground] Release / publish (push) Waiting to run
				
			By computing the actual Definition for, well, definitions, we unlock a bunch of richer machinery in the goto/hover subsystems for free. Fixes https://github.com/astral-sh/ty/issues/1001 Fixes https://github.com/astral-sh/ty/issues/1004
This commit is contained in:
		
							parent
							
								
									a04375173c
								
							
						
					
					
						commit
						c20d906503
					
				
					 6 changed files with 316 additions and 45 deletions
				
			
		|  | @ -15,7 +15,9 @@ pub use program::{ | |||
|     PythonVersionWithSource, SearchPathSettings, | ||||
| }; | ||||
| pub use python_platform::PythonPlatform; | ||||
| pub use semantic_model::{Completion, CompletionKind, HasType, NameKind, SemanticModel}; | ||||
| pub use semantic_model::{ | ||||
|     Completion, CompletionKind, HasDefinition, HasType, NameKind, SemanticModel, | ||||
| }; | ||||
| pub use site_packages::{PythonEnvironment, SitePackagesPaths, SysPrefixPathOrigin}; | ||||
| pub use types::ide_support::{ | ||||
|     ImportAliasResolution, ResolvedDefinition, definitions_for_attribute, | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ use ruff_source_file::LineIndex; | |||
| use crate::Db; | ||||
| use crate::module_name::ModuleName; | ||||
| use crate::module_resolver::{KnownModule, Module, resolve_module}; | ||||
| use crate::semantic_index::definition::Definition; | ||||
| use crate::semantic_index::scope::FileScopeId; | ||||
| use crate::semantic_index::semantic_index; | ||||
| use crate::types::ide_support::all_declarations_and_bindings; | ||||
|  | @ -296,6 +297,14 @@ pub trait HasType { | |||
|     fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db>; | ||||
| } | ||||
| 
 | ||||
| pub trait HasDefinition { | ||||
|     /// Returns the inferred type of `self`.
 | ||||
|     ///
 | ||||
|     /// ## Panics
 | ||||
|     /// May panic if `self` is from another file than `model`.
 | ||||
|     fn definition<'db>(&self, model: &SemanticModel<'db>) -> Definition<'db>; | ||||
| } | ||||
| 
 | ||||
| impl HasType for ast::ExprRef<'_> { | ||||
|     fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db> { | ||||
|         let index = semantic_index(model.db, model.file); | ||||
|  | @ -392,24 +401,31 @@ impl HasType for ast::Expr { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| macro_rules! impl_binding_has_ty { | ||||
| macro_rules! impl_binding_has_ty_def { | ||||
|     ($ty: ty) => { | ||||
|         impl HasDefinition for $ty { | ||||
|             #[inline] | ||||
|             fn definition<'db>(&self, model: &SemanticModel<'db>) -> Definition<'db> { | ||||
|                 let index = semantic_index(model.db, model.file); | ||||
|                 index.expect_single_definition(self) | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         impl HasType for $ty { | ||||
|             #[inline] | ||||
|             fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db> { | ||||
|                 let index = semantic_index(model.db, model.file); | ||||
|                 let binding = index.expect_single_definition(self); | ||||
|                 let binding = HasDefinition::definition(self, model); | ||||
|                 binding_type(model.db, binding) | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| impl_binding_has_ty!(ast::StmtFunctionDef); | ||||
| impl_binding_has_ty!(ast::StmtClassDef); | ||||
| impl_binding_has_ty!(ast::Parameter); | ||||
| impl_binding_has_ty!(ast::ParameterWithDefault); | ||||
| impl_binding_has_ty!(ast::ExceptHandlerExceptHandler); | ||||
| impl_binding_has_ty_def!(ast::StmtFunctionDef); | ||||
| impl_binding_has_ty_def!(ast::StmtClassDef); | ||||
| impl_binding_has_ty_def!(ast::Parameter); | ||||
| impl_binding_has_ty_def!(ast::ParameterWithDefault); | ||||
| impl_binding_has_ty_def!(ast::ExceptHandlerExceptHandler); | ||||
| 
 | ||||
| impl HasType for ast::Alias { | ||||
|     fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db> { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Aria Desires
						Aria Desires