diff --git a/parser/Cargo.toml b/parser/Cargo.toml
index 3668e65..07a1f1e 100644
--- a/parser/Cargo.toml
+++ b/parser/Cargo.toml
@@ -8,7 +8,7 @@
 
 [package]
 name = "autocxx-parser"
-version = "0.22.3"
+version = "0.26.0"
 authors = ["Adrian Taylor <adetaylor@chromium.org>"]
 license = "MIT OR Apache-2.0"
 description = "Safe autogenerated interop between Rust and C++"
@@ -21,16 +21,16 @@
 log = "0.4"
 proc-macro2 = "1.0"
 quote = "1.0"
-serde = { version = "1.0", features = [ "derive" ]}
+serde = { version = "1.0", features = ["derive"] }
 thiserror = "1.0"
 once_cell = "1.10"
 itertools = "0.10.3"
-indexmap = { version="1.8", features = ["serde"]}
+indexmap = { version = "1.8", features = ["serde"] }
 serde_json = "1.0"
 
 [dependencies.syn]
-version = "1.0.39"
-features = [ "full", "extra-traits" ]
+version = "2"
+features = ["full", "extra-traits"]
 
 [features]
 reproduction_case = []
diff --git a/parser/src/config.rs b/parser/src/config.rs
index 8d30249..3634295 100644
--- a/parser/src/config.rs
+++ b/parser/src/config.rs
@@ -29,7 +29,7 @@
 
 use quote::quote;
 
-#[derive(PartialEq, Clone, Debug, Hash)]
+#[derive(PartialEq, Eq, Clone, Debug, Hash)]
 pub enum UnsafePolicy {
     AllFunctionsSafe,
     AllFunctionsUnsafe,
@@ -101,7 +101,7 @@
     fn to_bindgen_item(&self) -> String {
         match self {
             AllowlistEntry::Item(i) => i.clone(),
-            AllowlistEntry::Namespace(ns) => format!("{}::.*", ns),
+            AllowlistEntry::Namespace(ns) => format!("{ns}::.*"),
         }
     }
 }
@@ -165,7 +165,7 @@
 pub struct RustFun {
     pub path: RustPath,
     pub sig: Signature,
-    pub receiver: Option<Ident>,
+    pub has_receiver: bool,
 }
 
 impl std::fmt::Debug for RustFun {
@@ -240,7 +240,7 @@
             let (possible_directives, to_parse, parse_completely) = if has_hexathorpe {
                 (&get_directives().need_hexathorpe, input, false)
             } else {
-                input.parse::<Option<syn::token::Bang>>()?;
+                input.parse::<Option<syn::token::Not>>()?;
                 syn::parenthesized!(args in input);
                 (&get_directives().need_exclamation, &args, true)
             };
@@ -250,7 +250,7 @@
                 None => {
                     return Err(syn::Error::new(
                         ident.span(),
-                        format!("expected {}", all_possible),
+                        format!("expected {all_possible}"),
                     ));
                 }
                 Some(directive) => directive.parse(to_parse, &mut config, &ident.span())?,
@@ -258,7 +258,7 @@
             if parse_completely && !to_parse.is_empty() {
                 return Err(syn::Error::new(
                     ident.span(),
-                    format!("found unexpected input within the directive {}", ident_str),
+                    format!("found unexpected input within the directive {ident_str}"),
                 ));
             }
             if input.is_empty() {
@@ -362,6 +362,7 @@
             || self.is_subclass_holder(cpp_name)
             || self.is_subclass_cpp(cpp_name)
             || self.is_rust_fun(cpp_name)
+            || self.is_rust_type_name(cpp_name)
             || self.is_concrete_type(cpp_name)
             || match &self.allowlist {
                 Allowlist::Unspecified(_) => panic!("Eek no allowlist yet"),
@@ -408,10 +409,14 @@
     }
 
     pub fn is_rust_type(&self, id: &Ident) -> bool {
+        let id_string = id.to_string();
+        self.is_rust_type_name(&id_string) || self.is_subclass_holder(&id_string)
+    }
+
+    fn is_rust_type_name(&self, possible_ty: &str) -> bool {
         self.rust_types
             .iter()
-            .any(|rt| rt.get_final_ident() == &id.to_string())
-            || self.is_subclass_holder(&id.to_string())
+            .any(|rt| rt.get_final_ident() == possible_ty)
     }
 
     fn is_rust_fun(&self, possible_fun: &str) -> bool {
diff --git a/parser/src/directives.rs b/parser/src/directives.rs
index 70c88fc..1cb35fb 100644
--- a/parser/src/directives.rs
+++ b/parser/src/directives.rs
@@ -275,7 +275,7 @@
 }
 
 fn allowlist_err_to_syn_err(err: AllowlistErr, span: &Span) -> syn::Error {
-    syn::Error::new(*span, format!("{}", err))
+    syn::Error::new(*span, format!("{err}"))
 }
 
 struct StringList<SET, GET>(SET, GET)
@@ -472,7 +472,7 @@
         config.extern_rust_funs.push(RustFun {
             path,
             sig,
-            receiver: None,
+            has_receiver: false,
         });
         Ok(())
     }
diff --git a/parser/src/file_locations.rs b/parser/src/file_locations.rs
index a113d0f..29acb48 100644
--- a/parser/src/file_locations.rs
+++ b/parser/src/file_locations.rs
@@ -77,7 +77,7 @@
             FileLocationStrategy::Custom(_) => panic!("Should never happen in the macro"),
             FileLocationStrategy::UnknownMaybeFromOutdir | FileLocationStrategy::FromOutDir(_) => {
                 let fname = config.get_rs_filename();
-                let fname = format!("/{}/{}/{}", BUILD_DIR_NAME, RS_DIR_NAME, fname);
+                let fname = format!("/{BUILD_DIR_NAME}/{RS_DIR_NAME}/{fname}");
                 // rust-analyzer works better if we ask Rust to do the path
                 // concatenation rather than doing it in proc-macro code.
                 // proc-macro code does not itself have access to the value of
@@ -95,13 +95,13 @@
                     include!( #fname );
                 }
             }
-            FileLocationStrategy::FromAutocxxRsJsonArchive(fname) => {
-                let archive = File::open(fname).unwrap_or_else(|_| panic!("Unable to open {}. This may mean you didn't run the codegen tool (autocxx_gen) before building the Rust code.", fname.to_string_lossy()));
+            FileLocationStrategy::FromAutocxxRsJsonArchive(fnames) => {
+                let archive = std::env::split_paths(fnames).flat_map(File::open).next().unwrap_or_else(|| panic!("Unable to open any of the paths listed in {}. This may mean you didn't run the codegen tool (autocxx_gen) before building the Rust code.", fnames.to_string_lossy()));
                 let multi_bindings: MultiBindings = serde_json::from_reader(archive)
                     .unwrap_or_else(|_| {
-                        panic!("Unable to interpret {} as JSON", fname.to_string_lossy())
+                        panic!("Unable to interpret {} as JSON", fnames.to_string_lossy())
                     });
-                multi_bindings.get(config).unwrap_or_else(|err| panic!("Unable to find a suitable set of bindings within the JSON archive {} ({}). This likely means that the codegen tool hasn't been rerun since some changes in your include_cpp! macro.", fname.to_string_lossy(), err))
+                multi_bindings.get(config).unwrap_or_else(|err| panic!("Unable to find a suitable set of bindings within the JSON archive {} ({}). This likely means that the codegen tool hasn't been rerun since some changes in your include_cpp! macro.", fnames.to_string_lossy(), err))
             }
         }
     }
diff --git a/parser/src/path.rs b/parser/src/path.rs
index 415b2ef..e3a0f9f 100644
--- a/parser/src/path.rs
+++ b/parser/src/path.rs
@@ -58,7 +58,7 @@
     fn parse(input: ParseStream) -> ParseResult<Self> {
         let id: Ident = input.parse()?;
         let mut p = RustPath::new_from_ident(id);
-        while input.parse::<Option<syn::token::Colon2>>()?.is_some() {
+        while input.parse::<Option<syn::token::PathSep>>()?.is_some() {
             let id: Ident = input.parse()?;
             p = p.append(id);
         }
