ligen_python_parser/
identifier.rs1use 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}