mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:24:57 +00:00
[ty] Add module to result returned by "all symbols" API
Based on how this API is currently implemented, this doesn't really cost us anything. But it gives us access to more information about where the symbol is defined.
This commit is contained in:
parent
0a2325c5fe
commit
02ee22db78
1 changed files with 16 additions and 10 deletions
|
@ -1,6 +1,6 @@
|
||||||
use ruff_db::files::File;
|
use ruff_db::files::File;
|
||||||
use ty_project::Db;
|
use ty_project::Db;
|
||||||
use ty_python_semantic::all_modules;
|
use ty_python_semantic::{Module, all_modules};
|
||||||
|
|
||||||
use crate::symbols::{QueryPattern, SymbolInfo, symbols_for_file_global_only};
|
use crate::symbols::{QueryPattern, SymbolInfo, symbols_for_file_global_only};
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use crate::symbols::{QueryPattern, SymbolInfo, symbols_for_file_global_only};
|
||||||
///
|
///
|
||||||
/// Returns symbols from all files in the workspace and dependencies, filtered
|
/// Returns symbols from all files in the workspace and dependencies, filtered
|
||||||
/// by the query.
|
/// by the query.
|
||||||
pub fn all_symbols(db: &dyn Db, query: &str) -> Vec<AllSymbolInfo> {
|
pub fn all_symbols<'db>(db: &'db dyn Db, query: &str) -> Vec<AllSymbolInfo<'db>> {
|
||||||
// If the query is empty, return immediately to avoid expensive file scanning
|
// If the query is empty, return immediately to avoid expensive file scanning
|
||||||
if query.is_empty() {
|
if query.is_empty() {
|
||||||
return Vec::new();
|
return Vec::new();
|
||||||
|
@ -36,6 +36,7 @@ pub fn all_symbols(db: &dyn Db, query: &str) -> Vec<AllSymbolInfo> {
|
||||||
// but this works pretty well as it is.
|
// but this works pretty well as it is.
|
||||||
results.lock().unwrap().push(AllSymbolInfo {
|
results.lock().unwrap().push(AllSymbolInfo {
|
||||||
symbol: symbol.to_owned(),
|
symbol: symbol.to_owned(),
|
||||||
|
module,
|
||||||
file,
|
file,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -56,10 +57,15 @@ pub fn all_symbols(db: &dyn Db, query: &str) -> Vec<AllSymbolInfo> {
|
||||||
/// A symbol found in the workspace and dependencies, including the
|
/// A symbol found in the workspace and dependencies, including the
|
||||||
/// file it was found in.
|
/// file it was found in.
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct AllSymbolInfo {
|
pub struct AllSymbolInfo<'db> {
|
||||||
/// The symbol information
|
/// The symbol information.
|
||||||
pub symbol: SymbolInfo<'static>,
|
pub symbol: SymbolInfo<'static>,
|
||||||
/// The file containing the symbol
|
/// The module containing the symbol.
|
||||||
|
pub module: Module<'db>,
|
||||||
|
/// The file containing the symbol.
|
||||||
|
///
|
||||||
|
/// This `File` is guaranteed to be the same
|
||||||
|
/// as the `File` underlying `module`.
|
||||||
pub file: File,
|
pub file: File,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,17 +154,17 @@ ABCDEFGHIJKLMNOP = 'https://api.example.com'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct AllSymbolDiagnostic {
|
struct AllSymbolDiagnostic<'db> {
|
||||||
symbol_info: AllSymbolInfo,
|
symbol_info: AllSymbolInfo<'db>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AllSymbolDiagnostic {
|
impl<'db> AllSymbolDiagnostic<'db> {
|
||||||
fn new(symbol_info: AllSymbolInfo) -> Self {
|
fn new(symbol_info: AllSymbolInfo<'db>) -> Self {
|
||||||
Self { symbol_info }
|
Self { symbol_info }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoDiagnostic for AllSymbolDiagnostic {
|
impl IntoDiagnostic for AllSymbolDiagnostic<'_> {
|
||||||
fn into_diagnostic(self) -> Diagnostic {
|
fn into_diagnostic(self) -> Diagnostic {
|
||||||
let symbol_kind_str = self.symbol_info.symbol.kind.to_string();
|
let symbol_kind_str = self.symbol_info.symbol.kind.to_string();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue