ligen_python_parser/
identifier.rs

1use ligen::ir::{Identifier, Mutability, Visibility};
2use ligen::parser::{Parser, ParserConfig};
3use ligen::parser::universal::identifier::IdentifierParser as InternalParser;
4use crate::prelude::*;
5
6#[derive(Default)]
7pub struct IdentifierParser {
8    parser: InternalParser
9}
10
11impl IdentifierParser {
12    pub fn new() -> Self {
13        Default::default()
14    }
15
16    pub fn parse<T>(&self, input: T, config: &ParserConfig) -> Result<Identifier>
17    where InternalParser: Parser<T, Output = Identifier>
18    {
19        self
20            .parser
21            .parse(input, config)
22    }
23
24    pub fn get_visibility(&self, identifier: &Identifier) -> Visibility {
25        if identifier.name.starts_with('_') && !identifier.name.starts_with("__") {
26            Visibility::Private
27        } else {
28            Visibility::Public
29        }
30    }
31
32    pub fn get_mutability(&self, identifier: &Identifier) -> Mutability {
33        if identifier.name.to_uppercase() == identifier.name {
34            Mutability::Constant
35        } else {
36            Mutability::Mutable
37        }
38    }
39}