mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-21 11:00:31 +00:00
[ty] Fix server version (#19284)
This commit is contained in:
parent
3cbf2fe82e
commit
3da8b51dc1
8 changed files with 54 additions and 23 deletions
|
@ -131,6 +131,7 @@ pub fn run(
|
||||||
}: Args,
|
}: Args,
|
||||||
) -> Result<ExitStatus> {
|
) -> Result<ExitStatus> {
|
||||||
{
|
{
|
||||||
|
ruff_db::set_program_version(crate::version::version().to_string()).unwrap();
|
||||||
let default_panic_hook = std::panic::take_hook();
|
let default_panic_hook = std::panic::take_hook();
|
||||||
std::panic::set_hook(Box::new(move |info| {
|
std::panic::set_hook(Box::new(move |info| {
|
||||||
#[expect(clippy::print_stderr)]
|
#[expect(clippy::print_stderr)]
|
||||||
|
|
|
@ -28,6 +28,21 @@ pub use web_time::{Instant, SystemTime, SystemTimeError};
|
||||||
pub type FxDashMap<K, V> = dashmap::DashMap<K, V, BuildHasherDefault<FxHasher>>;
|
pub type FxDashMap<K, V> = dashmap::DashMap<K, V, BuildHasherDefault<FxHasher>>;
|
||||||
pub type FxDashSet<K> = dashmap::DashSet<K, BuildHasherDefault<FxHasher>>;
|
pub type FxDashSet<K> = dashmap::DashSet<K, BuildHasherDefault<FxHasher>>;
|
||||||
|
|
||||||
|
static VERSION: std::sync::OnceLock<String> = std::sync::OnceLock::new();
|
||||||
|
|
||||||
|
/// Returns the version of the executing program if set.
|
||||||
|
pub fn program_version() -> Option<&'static str> {
|
||||||
|
VERSION.get().map(|version| version.as_str())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sets the version of the executing program.
|
||||||
|
///
|
||||||
|
/// ## Errors
|
||||||
|
/// If the version has already been initialized (can only be set once).
|
||||||
|
pub fn set_program_version(version: String) -> Result<(), String> {
|
||||||
|
VERSION.set(version)
|
||||||
|
}
|
||||||
|
|
||||||
/// Most basic database that gives access to files, the host system, source code, and parsed AST.
|
/// Most basic database that gives access to files, the host system, source code, and parsed AST.
|
||||||
#[salsa::db]
|
#[salsa::db]
|
||||||
pub trait Db: salsa::Database {
|
pub trait Db: salsa::Database {
|
||||||
|
|
|
@ -7,13 +7,25 @@ use std::{
|
||||||
fn main() {
|
fn main() {
|
||||||
// The workspace root directory is not available without walking up the tree
|
// The workspace root directory is not available without walking up the tree
|
||||||
// https://github.com/rust-lang/cargo/issues/3946
|
// https://github.com/rust-lang/cargo/issues/3946
|
||||||
let workspace_root = Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap())
|
let ruff_workspace_root = Path::new(&std::env::var("CARGO_MANIFEST_DIR").unwrap())
|
||||||
.join("..")
|
|
||||||
.join("..")
|
.join("..")
|
||||||
.join("..");
|
.join("..");
|
||||||
|
let ty_workspace_root = ruff_workspace_root.join("..");
|
||||||
|
|
||||||
version_info(&workspace_root);
|
version_info(&ty_workspace_root);
|
||||||
commit_info(&workspace_root);
|
|
||||||
|
// If not in a git repository, do not attempt to retrieve commit information
|
||||||
|
let git_dir = ty_workspace_root.join(".git");
|
||||||
|
if git_dir.exists() {
|
||||||
|
commit_info(&git_dir, &ty_workspace_root, false);
|
||||||
|
} else {
|
||||||
|
// Try if we're inside the ruff repository and, if so, use that commit hash.
|
||||||
|
let git_dir = ruff_workspace_root.join(".git");
|
||||||
|
|
||||||
|
if git_dir.exists() {
|
||||||
|
commit_info(&git_dir, &ruff_workspace_root, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let target = std::env::var("TARGET").unwrap();
|
let target = std::env::var("TARGET").unwrap();
|
||||||
println!("cargo::rustc-env=RUST_HOST_TARGET={target}");
|
println!("cargo::rustc-env=RUST_HOST_TARGET={target}");
|
||||||
|
@ -45,14 +57,8 @@ fn version_info(workspace_root: &Path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Retrieve commit information from the Git repository.
|
/// Retrieve commit information from the Git repository.
|
||||||
fn commit_info(workspace_root: &Path) {
|
fn commit_info(git_dir: &Path, workspace_root: &Path, is_ruff: bool) {
|
||||||
// If not in a git repository, do not attempt to retrieve commit information
|
if let Some(git_head_path) = git_head(git_dir) {
|
||||||
let git_dir = workspace_root.join(".git");
|
|
||||||
if !git_dir.exists() {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if let Some(git_head_path) = git_head(&git_dir) {
|
|
||||||
println!("cargo:rerun-if-changed={}", git_head_path.display());
|
println!("cargo:rerun-if-changed={}", git_head_path.display());
|
||||||
|
|
||||||
let git_head_contents = fs::read_to_string(git_head_path);
|
let git_head_contents = fs::read_to_string(git_head_path);
|
||||||
|
@ -96,7 +102,10 @@ fn commit_info(workspace_root: &Path) {
|
||||||
let mut describe_parts = describe.split('-');
|
let mut describe_parts = describe.split('-');
|
||||||
let last_tag = describe_parts.next().unwrap();
|
let last_tag = describe_parts.next().unwrap();
|
||||||
|
|
||||||
println!("cargo::rustc-env=TY_LAST_TAG={last_tag}");
|
println!(
|
||||||
|
"cargo::rustc-env=TY_LAST_TAG={ruff}{last_tag}",
|
||||||
|
ruff = if is_ruff { "ruff/" } else { "" }
|
||||||
|
);
|
||||||
|
|
||||||
// If this is the tagged commit, this component will be missing
|
// If this is the tagged commit, this component will be missing
|
||||||
println!(
|
println!(
|
||||||
|
|
|
@ -33,6 +33,7 @@ use ty_server::run_server;
|
||||||
|
|
||||||
pub fn run() -> anyhow::Result<ExitStatus> {
|
pub fn run() -> anyhow::Result<ExitStatus> {
|
||||||
setup_rayon();
|
setup_rayon();
|
||||||
|
ruff_db::set_program_version(crate::version::version().to_string()).unwrap();
|
||||||
|
|
||||||
let args = wild::args_os();
|
let args = wild::args_os();
|
||||||
let args = argfile::expand_args_from(args, argfile::parse_fromfile, argfile::PREFIX)
|
let args = argfile::expand_args_from(args, argfile::parse_fromfile, argfile::PREFIX)
|
||||||
|
|
|
@ -667,6 +667,13 @@ where
|
||||||
arch = std::env::consts::ARCH
|
arch = std::env::consts::ARCH
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
if let Some(version) = ruff_db::program_version() {
|
||||||
|
diagnostic.sub(SubDiagnostic::new(
|
||||||
|
Severity::Info,
|
||||||
|
format!("Version: {version}"),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
diagnostic.sub(SubDiagnostic::new(
|
diagnostic.sub(SubDiagnostic::new(
|
||||||
Severity::Info,
|
Severity::Info,
|
||||||
format!(
|
format!(
|
||||||
|
|
|
@ -17,10 +17,6 @@ pub(crate) const DIAGNOSTIC_NAME: &str = "ty";
|
||||||
/// result type is needed.
|
/// result type is needed.
|
||||||
pub(crate) type Result<T> = anyhow::Result<T>;
|
pub(crate) type Result<T> = anyhow::Result<T>;
|
||||||
|
|
||||||
pub(crate) fn version() -> &'static str {
|
|
||||||
env!("CARGO_PKG_VERSION")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn run_server() -> anyhow::Result<()> {
|
pub fn run_server() -> anyhow::Result<()> {
|
||||||
let four = NonZeroUsize::new(4).unwrap();
|
let four = NonZeroUsize::new(4).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -57,12 +57,10 @@ impl Server {
|
||||||
let server_capabilities =
|
let server_capabilities =
|
||||||
Self::server_capabilities(position_encoding, global_options.diagnostic_mode());
|
Self::server_capabilities(position_encoding, global_options.diagnostic_mode());
|
||||||
|
|
||||||
let connection = connection.initialize_finish(
|
let version = ruff_db::program_version().unwrap_or("Unknown");
|
||||||
id,
|
|
||||||
&server_capabilities,
|
let connection =
|
||||||
crate::SERVER_NAME,
|
connection.initialize_finish(id, &server_capabilities, crate::SERVER_NAME, version)?;
|
||||||
crate::version(),
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// The number 32 was chosen arbitrarily. The main goal was to have enough capacity to queue
|
// The number 32 was chosen arbitrarily. The main goal was to have enough capacity to queue
|
||||||
// some responses before blocking.
|
// some responses before blocking.
|
||||||
|
@ -74,6 +72,8 @@ impl Server {
|
||||||
global_options.tracing.log_file.as_deref(),
|
global_options.tracing.log_file.as_deref(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
tracing::debug!("Version: {version}");
|
||||||
|
|
||||||
let mut workspace_for_url = |url: Url| {
|
let mut workspace_for_url = |url: Url| {
|
||||||
let Some(workspace_settings) = workspace_options.as_mut() else {
|
let Some(workspace_settings) = workspace_options.as_mut() else {
|
||||||
return (url, ClientOptions::default());
|
return (url, ClientOptions::default());
|
||||||
|
|
|
@ -36,6 +36,8 @@ pub fn version() -> String {
|
||||||
pub fn run() {
|
pub fn run() {
|
||||||
use log::Level;
|
use log::Level;
|
||||||
|
|
||||||
|
ruff_db::set_program_version(version()).unwrap();
|
||||||
|
|
||||||
// When the `console_error_panic_hook` feature is enabled, we can call the
|
// When the `console_error_panic_hook` feature is enabled, we can call the
|
||||||
// `set_panic_hook` function at least once during initialization, and then
|
// `set_panic_hook` function at least once during initialization, and then
|
||||||
// we will get better error messages if our code ever panics.
|
// we will get better error messages if our code ever panics.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue