mirror of
https://github.com/astral-sh/ruff.git
synced 2025-11-17 02:53:01 +00:00
[ty] Implement the legacy PEP-484 convention for indicating positional-only parameters (#20248)
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
Co-authored-by: Carl Meyer <carl@astral.sh>
This commit is contained in:
parent
eb6154f792
commit
5d52902e18
17 changed files with 376 additions and 150 deletions
|
|
@ -159,7 +159,6 @@ pub(crate) fn attribute_scopes<'db, 's>(
|
|||
class_body_scope: ScopeId<'db>,
|
||||
) -> impl Iterator<Item = FileScopeId> + use<'s, 'db> {
|
||||
let file = class_body_scope.file(db);
|
||||
let module = parsed_module(db, file).load(db);
|
||||
let index = semantic_index(db, file);
|
||||
let class_scope_id = class_body_scope.file_scope_id(db);
|
||||
|
||||
|
|
@ -175,7 +174,7 @@ pub(crate) fn attribute_scopes<'db, 's>(
|
|||
(child_scope_id, scope)
|
||||
};
|
||||
|
||||
function_scope.node().as_function(&module)?;
|
||||
function_scope.node().as_function()?;
|
||||
Some(function_scope_id)
|
||||
})
|
||||
}
|
||||
|
|
@ -332,6 +331,39 @@ impl<'db> SemanticIndex<'db> {
|
|||
Some(&self.scopes[self.parent_scope_id(scope_id)?])
|
||||
}
|
||||
|
||||
/// Return the [`Definition`] of the class enclosing this method, given the
|
||||
/// method's body scope, or `None` if it is not a method.
|
||||
pub(crate) fn class_definition_of_method(
|
||||
&self,
|
||||
function_body_scope: FileScopeId,
|
||||
) -> Option<Definition<'db>> {
|
||||
let current_scope = self.scope(function_body_scope);
|
||||
if current_scope.kind() != ScopeKind::Function {
|
||||
return None;
|
||||
}
|
||||
let parent_scope_id = current_scope.parent()?;
|
||||
let parent_scope = self.scope(parent_scope_id);
|
||||
|
||||
let class_scope = match parent_scope.kind() {
|
||||
ScopeKind::Class => parent_scope,
|
||||
ScopeKind::TypeParams => {
|
||||
let class_scope_id = parent_scope.parent()?;
|
||||
let potentially_class_scope = self.scope(class_scope_id);
|
||||
|
||||
match potentially_class_scope.kind() {
|
||||
ScopeKind::Class => potentially_class_scope,
|
||||
_ => return None,
|
||||
}
|
||||
}
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
class_scope
|
||||
.node()
|
||||
.as_class()
|
||||
.map(|node_ref| self.expect_single_definition(node_ref))
|
||||
}
|
||||
|
||||
fn is_scope_reachable(&self, db: &'db dyn Db, scope_id: FileScopeId) -> bool {
|
||||
self.parent_scope_id(scope_id)
|
||||
.is_none_or(|parent_scope_id| {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue