skill-ls/skillls/parsing/context.py

33 lines
735 B
Python

from dataclasses import dataclass
from enum import Enum, auto
from typing import ClassVar, DefaultDict
from .location import Range
from .tokenize import BaseToken
class ContextType(Enum):
Use = auto()
Assign = auto()
Declare = auto()
Unbind = auto()
@dataclass(frozen=True)
class Context:
lookup: ClassVar[dict[ContextType, list["Context"]]] = {}
typ: ContextType
token: list[BaseToken]
def __post_init__(self):
type(self).lookup.setdefault(self.typ, [])
type(self).lookup[self.typ].append(self)
@property
def range(self) -> Range:
new_range = self.token[0].range
for token in self.token[1:]:
new_range += token.range
return new_range