From 928ef34b2ee38ca2c153665a2ab8969f1cc90756 Mon Sep 17 00:00:00 2001 From: quantumshiro Date: Sat, 6 Sep 2025 02:07:35 +0900 Subject: [PATCH 1/2] fix: default check path to project root or CWD when omitted --- crates/fe/src/main.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/fe/src/main.rs b/crates/fe/src/main.rs index df3e7a0d4..7907e1638 100644 --- a/crates/fe/src/main.rs +++ b/crates/fe/src/main.rs @@ -16,7 +16,7 @@ pub struct Options { pub enum Command { Build, Check { - // #[clap(default_value_t = find_project_root().unwrap_or(Utf8PathBuf::from(".")))] + #[arg(default_value_t = default_project_path())] path: Utf8PathBuf, #[arg(short, long)] core: Option, @@ -27,6 +27,10 @@ pub enum Command { New, } +fn default_project_path() -> Utf8PathBuf { + driver::files::find_project_root().unwrap_or(Utf8PathBuf::from(".")) +} + fn main() { let opts = Options::parse(); run(&opts); From 5d2cb9848bce3bf37f29142363dbb7adaf409e10 Mon Sep 17 00:00:00 2001 From: quantumshiro Date: Wed, 10 Sep 2025 09:57:08 +0900 Subject: [PATCH 2/2] fix: replace unsafe transmute with checked conversion in kind_from_raw: --- Cargo.lock | 32 ++++++++++++++++++++++++++++++++ crates/parser/Cargo.toml | 1 + crates/parser/src/syntax_kind.rs | 3 ++- crates/parser/src/syntax_node.rs | 2 +- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9cd5ec423..0377bf4b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -943,6 +943,7 @@ dependencies = [ "fe-test-utils", "lazy_static", "logos", + "num_enum", "rowan", "smallvec 2.0.0-alpha.11", "tracing", @@ -1622,6 +1623,28 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_enum" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.105", +] + [[package]] name = "object" version = "0.36.7" @@ -1797,6 +1820,15 @@ dependencies = [ "zerovec", ] +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" version = "1.0.97" diff --git a/crates/parser/Cargo.toml b/crates/parser/Cargo.toml index e6a66f19d..8c2560606 100644 --- a/crates/parser/Cargo.toml +++ b/crates/parser/Cargo.toml @@ -16,6 +16,7 @@ derive_more.workspace = true lazy_static = "1.5.0" logos = "0.15" rowan = "0.16.1" +num_enum = "0.7" smallvec.workspace = true unwrap-infallible = "0.1.5" tracing.workspace = true diff --git a/crates/parser/src/syntax_kind.rs b/crates/parser/src/syntax_kind.rs index b2327be1f..09c6a7775 100644 --- a/crates/parser/src/syntax_kind.rs +++ b/crates/parser/src/syntax_kind.rs @@ -1,9 +1,10 @@ //! This module contains the definition of the [`SyntaxKind`]. use logos::Logos; +use num_enum::TryFromPrimitive; /// The definition of the `SyntaxKind'. -#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Logos)] +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Logos, TryFromPrimitive)] #[repr(u16)] pub enum SyntaxKind { // Atom kinds. These are leaf nodes. diff --git a/crates/parser/src/syntax_node.rs b/crates/parser/src/syntax_node.rs index 70d47c443..23f0b4906 100644 --- a/crates/parser/src/syntax_node.rs +++ b/crates/parser/src/syntax_node.rs @@ -7,7 +7,7 @@ impl rowan::Language for FeLang { type Kind = SyntaxKind; fn kind_from_raw(raw: rowan::SyntaxKind) -> Self::Kind { - unsafe { std::mem::transmute::(raw.0) } + SyntaxKind::try_from(raw.0).expect("invalid SyntaxKind from raw u16") } fn kind_to_raw(kind: Self::Kind) -> rowan::SyntaxKind {