This repository has been archived on 2026-08-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
donglora/vendor/syn/tests/test_parse_stream.rs
T
swaitsandClaude Opus 4.6 3102fc747a feat: add display UI with splash screen, dashboard, and RSSI sparkline
Implement full SSD1306 OLED display support:
- Splash screen on boot (1.5s) with project name, version, board
- Dashboard showing radio state, config, counters, RSSI/SNR
- RSSI history sparkline (64-sample ring buffer, 2px-wide bars)
- DisplayOn/DisplayOff host commands routed via dedicated channel
- Pure render functions against generic DrawTarget (no hardware coupling)
- Display on/off control bypasses radio task entirely

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 20:42:54 -06:00

188 lines
5.4 KiB
Rust

#![allow(clippy::items_after_statements, clippy::let_underscore_untyped)]
use proc_macro2::{Delimiter, Group, Punct, Spacing, Span, TokenStream, TokenTree};
use quote::quote;
use syn::ext::IdentExt as _;
use syn::parse::discouraged::AnyDelimiter;
use syn::parse::{ParseStream, Parser as _, Result};
use syn::{parenthesized, token, Ident, Lifetime, Token};
#[test]
fn test_peek_punct() {
let tokens = quote!(+= + =);
fn assert(input: ParseStream) -> Result<()> {
assert!(input.peek(Token![+]));
assert!(input.peek(Token![+=]));
let _: Token![+] = input.parse()?;
assert!(input.peek(Token![=]));
assert!(!input.peek(Token![==]));
assert!(!input.peek(Token![+]));
let _: Token![=] = input.parse()?;
assert!(input.peek(Token![+]));
assert!(!input.peek(Token![+=]));
let _: Token![+] = input.parse()?;
let _: Token![=] = input.parse()?;
Ok(())
}
assert.parse2(tokens).unwrap();
}
#[test]
fn test_peek_lifetime() {
// 'static ;
let tokens = TokenStream::from_iter([
TokenTree::Punct(Punct::new('\'', Spacing::Joint)),
TokenTree::Ident(Ident::new("static", Span::call_site())),
TokenTree::Punct(Punct::new(';', Spacing::Alone)),
]);
fn assert(input: ParseStream) -> Result<()> {
assert!(input.peek(Lifetime));
assert!(input.peek2(Token![;]));
assert!(!input.peek2(Token![static]));
let _: Lifetime = input.parse()?;
assert!(input.peek(Token![;]));
let _: Token![;] = input.parse()?;
Ok(())
}
assert.parse2(tokens).unwrap();
}
#[test]
fn test_peek_not_lifetime() {
// ' static
let tokens = TokenStream::from_iter([
TokenTree::Punct(Punct::new('\'', Spacing::Alone)),
TokenTree::Ident(Ident::new("static", Span::call_site())),
]);
fn assert(input: ParseStream) -> Result<()> {
assert!(!input.peek(Lifetime));
assert!(input.parse::<Option<Punct>>()?.is_none());
let _: TokenTree = input.parse()?;
assert!(input.peek(Token![static]));
let _: Token![static] = input.parse()?;
Ok(())
}
assert.parse2(tokens).unwrap();
}
#[test]
fn test_peek_ident() {
let tokens = quote!(static var);
fn assert(input: ParseStream) -> Result<()> {
assert!(!input.peek(Ident));
assert!(input.peek(Ident::peek_any));
assert!(input.peek(Token![static]));
let _: Token![static] = input.parse()?;
assert!(input.peek(Ident));
assert!(input.peek(Ident::peek_any));
let _: Ident = input.parse()?;
Ok(())
}
assert.parse2(tokens).unwrap();
}
#[test]
fn test_peek_groups() {
// pub ( :: ) «∅ ! = ∅» static
let tokens = TokenStream::from_iter([
TokenTree::Ident(Ident::new("pub", Span::call_site())),
TokenTree::Group(Group::new(
Delimiter::Parenthesis,
TokenStream::from_iter([
TokenTree::Punct(Punct::new(':', Spacing::Joint)),
TokenTree::Punct(Punct::new(':', Spacing::Alone)),
]),
)),
TokenTree::Group(Group::new(
Delimiter::None,
TokenStream::from_iter([
TokenTree::Punct(Punct::new('!', Spacing::Alone)),
TokenTree::Punct(Punct::new('=', Spacing::Alone)),
]),
)),
TokenTree::Ident(Ident::new("static", Span::call_site())),
]);
fn assert(input: ParseStream) -> Result<()> {
assert!(input.peek2(token::Paren));
assert!(input.peek3(token::Group));
assert!(input.peek3(Token![!]));
let _: Token![pub] = input.parse()?;
assert!(input.peek(token::Paren));
assert!(!input.peek(Token![::]));
assert!(!input.peek2(Token![::]));
assert!(input.peek2(Token![!]));
assert!(input.peek2(token::Group));
assert!(input.peek3(Token![=]));
assert!(!input.peek3(Token![static]));
let content;
parenthesized!(content in input);
assert!(content.peek(Token![::]));
assert!(content.peek2(Token![:]));
assert!(!content.peek3(token::Group));
assert!(!content.peek3(Token![!]));
assert!(input.peek(token::Group));
assert!(input.peek(Token![!]));
let _: Token![::] = content.parse()?;
assert!(input.peek(token::Group));
assert!(input.peek(Token![!]));
assert!(input.peek2(Token![=]));
assert!(input.peek3(Token![static]));
assert!(!input.peek2(Token![static]));
let implicit = input.fork();
let explicit = input.fork();
let _: Token![!] = implicit.parse()?;
assert!(implicit.peek(Token![=]));
assert!(implicit.peek2(Token![static]));
let _: Token![=] = implicit.parse()?;
assert!(implicit.peek(Token![static]));
let (delimiter, _span, grouped) = explicit.parse_any_delimiter()?;
assert_eq!(delimiter, Delimiter::None);
assert!(grouped.peek(Token![!]));
assert!(grouped.peek2(Token![=]));
assert!(!grouped.peek3(Token![static]));
let _: Token![!] = grouped.parse()?;
assert!(grouped.peek(Token![=]));
assert!(!grouped.peek2(Token![static]));
let _: Token![=] = grouped.parse()?;
assert!(!grouped.peek(Token![static]));
let _: TokenStream = input.parse()?;
Ok(())
}
assert.parse2(tokens).unwrap();
}