java_lang/tree/parser/
compilation_unit.rs1use super::{
2 super::{import_declarations, package_declaration},
3 CompilationUnitDeclaration,
4};
5use crate::TokenStream;
6use nom::{combinator::opt, IResult, Parser};
7
8pub fn compilation_unit_declaration<'a>(
48 tokens: TokenStream,
49) -> IResult<TokenStream, CompilationUnitDeclaration<'a>> {
50 let (tokens, package) = opt(package_declaration).parse(tokens)?;
51 let (tokens, imports) = import_declarations(tokens)?;
52
53 Ok((
54 tokens,
55 CompilationUnitDeclaration::Ordinary {package, imports, top_level_class_or_interfaces: Default::default()},
56 ))
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn test_compile_unit() -> anyhow::Result<()> {
65 let (_, tokens) = TokenStream::from_str(
66 "\
67 package com.test;\
68 import java.io.File;
69 ",
70 )?;
71 assert!(!tokens.is_empty());
72
73 let (tokens, cu) = compilation_unit_declaration(tokens)?;
74 assert_eq!(cu.package().unwrap().name, "com.test");
75 assert_eq!(cu.imports().len(), 1);
76
77 assert!(tokens.is_empty());
78
79 Ok(())
80 }
81}