1mod compilation_unit;
2mod import;
3mod package;
4
5pub use {compilation_unit::*, import::*, package::*};
6
7use super::{CompilationUnitDeclaration,DocumentationComment};
8use crate::{Token, TokenStream};
9use nom::{error::ErrorKind, IResult, Input};
10
11fn documentation_comment<'a>(tokens: TokenStream) -> IResult<TokenStream, DocumentationComment<'a>> {
12 let (tokens, out) = tokens
13 .split_at_position1_complete(|token| !token.is_documentation(), ErrorKind::Complete)?;
14
15 let token = out.iter_elements().next().unwrap();
16 let documentation = if let Token::JavaDoc(d) = token {
17 d
18 } else {
19 Default::default()
20 };
21 Ok((tokens, documentation.into()))
22}
23
24fn identifier(tokens: TokenStream) -> IResult<TokenStream, Token> {
25 let (tokens, out) =
26 tokens.split_at_position1_complete(|token| !token.is_identifier(), ErrorKind::Complete)?;
27 let token = out.iter_elements().next().unwrap();
28 Ok((tokens, token))
29}
30
31pub fn parse<'a>(tokens: TokenStream) -> IResult<TokenStream, CompilationUnitDeclaration<'a>> {
32 compilation_unit_declaration(tokens)
33}