java_lang/tree/
parser.rs

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}