Skip to content

Commit 6e7f964

Browse files
committed
Add equality and hash traits to core AST nodes
Core AST nodes such as `Ident`, `TypeRef`, and `QualifiedIdent` now derive `PartialEq`, `Eq`, and `Hash`. This allows them to be compared for equality and used in hash-based collections, a prerequisite for upcoming semantic analysis features. This also includes minor cleanup by removing several unnecessary clippy `expect` attributes from test modules.
1 parent 9c36b9b commit 6e7f964

File tree

10 files changed

+5
-20
lines changed

10 files changed

+5
-20
lines changed

src/core/parser/ast/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,7 @@ pub struct BlockAttribute {
607607
/// assert!(q.is_simple());
608608
/// assert_eq!(q.as_simple().unwrap().text, "String");
609609
/// ```
610-
#[derive(Debug, Clone, AstContainerNode)]
610+
#[derive(Debug, Clone, PartialEq, Eq, Hash, AstContainerNode)]
611611
pub struct QualifiedIdent {
612612
/// The identifier parts (e.g., `["db", "VarChar"]`).
613613
pub parts: Vec<Ident>,
@@ -660,7 +660,7 @@ impl QualifiedIdent {
660660
/// assert_eq!(named.node_type(), "NamedType");
661661
/// assert_eq!(list.node_type(), "ListType");
662662
/// ```
663-
#[derive(Debug, Clone)]
663+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
664664
pub enum TypeRef {
665665
/// A named type (scalar, enum, or model reference).
666666
Named(NamedType),
@@ -713,7 +713,7 @@ impl AstNode for TypeRef {
713713
/// };
714714
/// assert_eq!(nt.node_type(), "NamedType");
715715
/// ```
716-
#[derive(Debug, Clone, AstContainerNode)]
716+
#[derive(Debug, Clone, PartialEq, Eq, Hash, AstContainerNode)]
717717
pub struct NamedType {
718718
/// The type name (may be qualified for built-ins).
719719
pub name: QualifiedIdent,
@@ -743,7 +743,7 @@ pub struct NamedType {
743743
/// let list = ListType { inner: Box::new(inner), span: sp((1,1),(1,6)) };
744744
/// assert_eq!(list.node_type(), "ListType");
745745
/// ```
746-
#[derive(Debug, Clone, AstContainerNode)]
746+
#[derive(Debug, Clone, PartialEq, Eq, Hash, AstContainerNode)]
747747
pub struct ListType {
748748
/// The inner type.
749749
pub inner: Box<TypeRef>,
@@ -1076,7 +1076,7 @@ impl AstNode for ObjectKey {}
10761076
/// An identifier with its source text and span.
10771077
///
10781078
/// Keeps the original identifier text and a span over it.
1079-
#[derive(Debug, Clone, AstLeafNode)]
1079+
#[derive(Debug, Clone, PartialEq, Eq, Hash, AstLeafNode)]
10801080
pub struct Ident {
10811081
/// The identifier text.
10821082
pub text: String,

src/core/parser/components/attributes.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,8 +802,6 @@ impl Parser<BlockAttribute> for BlockAttributeParser {
802802

803803
#[cfg(test)]
804804
mod tests {
805-
#![expect(clippy::unwrap_used)]
806-
807805
use crate::core::parser::ParserOptions;
808806
use crate::core::parser::VectorTokenStream;
809807
use crate::core::parser::ast::Arg;

src/core/parser/components/declarations.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -810,8 +810,6 @@ impl DeclarationWrapper<TypeDecl> for TypeDeclParser {
810810

811811
#[cfg(test)]
812812
mod tests {
813-
#![expect(clippy::unwrap_used)]
814-
815813
use crate::core::parser::components::declarations::{
816814
DatasourceParser, EnumParser, GeneratorParser, ModelParser,
817815
TypeDeclParser,

src/core/parser/components/members.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,6 @@ impl Parser<EnumMember> for EnumMemberParser {
606606

607607
#[cfg(test)]
608608
mod tests {
609-
#![expect(clippy::expect_used, clippy::unwrap_used)]
610-
611609
use crate::core::parser::ast::{
612610
EnumMember, Expr, HasNodeType, ModelMember, NamedType, TypeRef,
613611
};

src/core/parser/components/primitives.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,6 @@ impl Parser<QualifiedIdent> for QualifiedIdentParser {
300300

301301
#[cfg(test)]
302302
mod tests {
303-
#![expect(clippy::unwrap_used)]
304-
305303
use crate::core::parser::components::primitives::{
306304
IdentParser, QualifiedIdentParser,
307305
};

src/core/parser/components/types.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,6 @@ impl Parser<TypeRef> for TypeRefParser {
336336

337337
#[cfg(test)]
338338
mod tests {
339-
#![expect(clippy::unwrap_used, clippy::expect_used)]
340-
341339
use crate::core::parser::components::types::{
342340
NamedTypeParser, TypeRefParser,
343341
};

src/core/parser/config.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,6 @@ impl<T> ParseResult<T> {
241241

242242
#[cfg(test)]
243243
mod config_tests {
244-
#![expect(clippy::unwrap_used)]
245244
use super::*;
246245
use crate::core::scanner::tokens::{SymbolLocation, SymbolSpan};
247246

src/core/parser/progress.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,6 @@ impl TokenStream for ObservedTokenStream<'_> {
250250

251251
#[cfg(test)]
252252
mod tests {
253-
#![expect(clippy::expect_used)]
254253
use super::*;
255254
use crate::core::parser::stream::VectorTokenStream;
256255

src/core/parser/schema_parser.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,6 @@ struct Block {
546546

547547
#[cfg(test)]
548548
mod tests {
549-
#![expect(clippy::unwrap_used)]
550549
use super::*;
551550
use std::sync::{
552551
Arc,

src/core/parser/stream.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,8 +399,6 @@ impl<T: ?Sized + TokenStream> TokenStreamExt for T {}
399399

400400
#[cfg(test)]
401401
mod tests {
402-
#![expect(clippy::expect_used, clippy::unwrap_used)]
403-
404402
use super::*;
405403

406404
fn create_test_token(token_type: TokenType) -> Token {

0 commit comments

Comments
 (0)