From 8bc61847284e8ea45e8e4eb1d52bd417025005b9 Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Tue, 25 Jul 2023 16:22:57 -0700 Subject: [PATCH] [rust] deny unused fields on non-node structs Rejects unknown fields during deserialization of helper structs (which don't have a `type` field). This would be super useful for AST `Node` types, too, but that requires implementing a custom deserializer so i'm punting on that for now. --- compiler/forget/crates/forget_estree/src/generated.rs | 5 +++++ compiler/forget/crates/forget_estree_codegen/src/codegen.rs | 1 + 2 files changed, 6 insertions(+) diff --git a/compiler/forget/crates/forget_estree/src/generated.rs b/compiler/forget/crates/forget_estree/src/generated.rs index d8b0bf9a3d..4f60f49438 100644 --- a/compiler/forget/crates/forget_estree/src/generated.rs +++ b/compiler/forget/crates/forget_estree/src/generated.rs @@ -5,17 +5,20 @@ use serde::ser::{Serializer, SerializeMap}; use serde::{Serialize, Deserialize}; use crate::{JsValue, Binding, SourceRange}; #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(deny_unknown_fields)] pub struct SourceLocation { pub source: Option, pub start: Position, pub end: Position, } #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(deny_unknown_fields)] pub struct Position { pub line: NonZeroU32, pub column: u32, } #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(deny_unknown_fields)] pub struct Function { pub id: Option, pub params: Vec, @@ -32,11 +35,13 @@ pub struct Function { pub range: Option, } #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(deny_unknown_fields)] pub struct RegExpValue { pub pattern: String, pub flags: String, } #[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(deny_unknown_fields)] pub struct TemplateElementValue { pub cooked: Option, pub raw: String, diff --git a/compiler/forget/crates/forget_estree_codegen/src/codegen.rs b/compiler/forget/crates/forget_estree_codegen/src/codegen.rs index f7598957c9..85228cab97 100644 --- a/compiler/forget/crates/forget_estree_codegen/src/codegen.rs +++ b/compiler/forget/crates/forget_estree_codegen/src/codegen.rs @@ -90,6 +90,7 @@ impl Object { quote! { #[derive(Serialize, Deserialize, Clone, Debug)] + #[serde(deny_unknown_fields)] pub struct #name { #(#fields),* }