"""
This type stub file was generated by pyright.
"""

from typing import Self, TYPE_CHECKING, TypeVar, override
from tree_sitter import Node as TSNode
from graph_sitter.codebase.codebase_graph import CodebaseGraph
from graph_sitter.core.autocommit import reader
from graph_sitter.core.detached_symbols.code_block import CodeBlock
from graph_sitter.core.expressions import Expression
from graph_sitter.core.interfaces.has_attribute import HasAttribute
from graph_sitter.core.interfaces.importable import Importable
from graph_sitter.core.node_id_factory import NodeId
from graph_sitter.core.statements.statement import Statement
from graph_sitter.typescript.interfaces.has_block import TSHasBlock
from graph_sitter.typescript.statements.attribute import TSAttribute
from graph_sitter.typescript.symbol import TSSymbol
from graph_sitter.writer_decorators import noapidoc, ts_apidoc
from graph_sitter.typescript.detached_symbols.code_block import TSCodeBlock

if TYPE_CHECKING:
    ...
Parent = TypeVar("Parent", bound="TSHasBlock")
@ts_apidoc
class TSEnum(TSHasBlock, TSSymbol, HasAttribute[TSAttribute]):
    """Representation of an Enum in TypeScript"""
    symbol_type = ...
    body: Expression[Self]
    code_block: TSCodeBlock
    def __init__(self, ts_node: TSNode, file_id: NodeId, G: CodebaseGraph, parent: Statement[CodeBlock[Parent, ...]]) -> None:
        ...
    
    @property
    @reader
    def attributes(self) -> list[TSAttribute[Self, None]]:
        """Property that retrieves the attributes of a TypeScript enum.

        Returns the list of attributes defined within the enum's code block.

        Returns:
            list[TSAttribute[Self, None]]: List of TSAttribute objects representing the enum's attributes.
        """
        ...
    
    @reader
    def get_attribute(self, name: str) -> TSAttribute | None:
        """Returns an attribute from the TypeScript enum by its name.

        Args:
            name (str): The name of the attribute to retrieve.

        Returns:
            TSAttribute | None: The attribute with the given name if it exists, None otherwise.
        """
        ...
    
    @property
    @noapidoc
    def descendant_symbols(self) -> list[Importable]:
        ...
    
    @noapidoc
    @reader
    @override
    def resolve_attribute(self, name: str) -> TSAttribute | None:
        ...
    


