refactor: move source files in subdirectory

This commit is contained in:
2026-05-22 11:05:47 +02:00
parent b5969e9a2b
commit 6e0190a378
15 changed files with 35 additions and 31 deletions

View File

@@ -66,17 +66,18 @@ class {cls}({base}):
return visitor.visit_{func_name}(self) return visitor.visit_{func_name}(self)
""" """
def snake_case(text: str) -> str: def snake_case(text: str) -> str:
return re.sub(r"[A-Z]", lambda c: "_" + c.group().lower(), text).lower().strip("_") return re.sub(r"[A-Z]", lambda c: "_" + c.group().lower(), text).lower().strip("_")
def make_visitor_method(cls: str, param: str): def make_visitor_method(cls: str, param: str):
method: str = VISITOR_METHOD_TEMPLATE.format( method: str = VISITOR_METHOD_TEMPLATE.format(
func_name=snake_case(cls), func_name=snake_case(cls), param=param, cls=cls
param=param,
cls=cls
) )
return method.strip("\n") return method.strip("\n")
def make_class(name: str, cls: str, base: str): def make_class(name: str, cls: str, base: str):
body: str = cls.split("\n", 1)[1] body: str = cls.split("\n", 1)[1]
func_name: str = snake_case(name) func_name: str = snake_case(name)
@@ -88,6 +89,7 @@ def make_class(name: str, cls: str, base: str):
) )
return cls_def.strip("\n") return cls_def.strip("\n")
def generate(src: str): def generate(src: str):
classes: list[str] = src.split("\n\n") classes: list[str] = src.split("\n\n")
stmt_visitor_methods: list[str] = [] stmt_visitor_methods: list[str] = []
@@ -114,10 +116,11 @@ def generate(src: str):
expressions="\n\n\n".join(expressions), expressions="\n\n\n".join(expressions),
) )
def main(): def main():
root: Path = Path(__file__).parent.parent root: Path = Path(__file__).parent.parent
in_path: Path = root / "gen" / "ast.py" in_path: Path = root / "gen" / "ast.py"
out_path: Path = root / "core" / "ast" / "midas.py" out_path: Path = root / "midas" / "ast" / "midas.py"
src: str = in_path.read_text() src: str = in_path.read_text()
generated: str = generate(src) generated: str = generate(src)

View File

@@ -1,6 +1,6 @@
from typing import Optional, Sequence from typing import Optional, Sequence
from core.ast.midas import ( from midas.ast.midas import (
BinaryExpr, BinaryExpr,
ComplexTypeStmt, ComplexTypeStmt,
Expr, Expr,

View File

@@ -9,7 +9,7 @@ from abc import ABC, abstractmethod
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any, Generic, Optional, TypeVar from typing import Any, Generic, Optional, TypeVar
from lexer.token import Token from midas.lexer.token import Token
T = TypeVar("T") T = TypeVar("T")

View File

@@ -5,7 +5,7 @@ from contextlib import contextmanager
from enum import Enum, auto from enum import Enum, auto
from typing import Generator, Generic, Optional, Protocol, TypeVar from typing import Generator, Generic, Optional, Protocol, TypeVar
import core.ast.midas as m import midas.ast.midas as m
class _Level(Enum): class _Level(Enum):
@@ -84,7 +84,7 @@ class AstPrinter(Generic[T]):
class MidasAstPrinter(AstPrinter, m.Expr.Visitor[None], m.Stmt.Visitor[None]): class MidasAstPrinter(AstPrinter, m.Expr.Visitor[None], m.Stmt.Visitor[None]):
#Statements # Statements
def visit_simple_type_stmt(self, stmt: m.SimpleTypeStmt): def visit_simple_type_stmt(self, stmt: m.SimpleTypeStmt):
self._write_line("SimpleTypeStmt") self._write_line("SimpleTypeStmt")

View File

@@ -1,8 +1,8 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Any, Callable, Optional from typing import Any, Callable, Optional
from lexer.position import Position from midas.lexer.position import Position
from lexer.token import Token, TokenType from midas.lexer.token import Token, TokenType
class MidasSyntaxError(Exception): class MidasSyntaxError(Exception):

View File

@@ -1,4 +1,4 @@
from lexer.token import TokenType from midas.lexer.token import TokenType
KEYWORDS: dict[str, TokenType] = { KEYWORDS: dict[str, TokenType] = {
"type": TokenType.TYPE, "type": TokenType.TYPE,

View File

@@ -1,6 +1,6 @@
from lexer.base import Lexer from midas.lexer.base import Lexer
from lexer.keyword import KEYWORDS from midas.lexer.keyword import KEYWORDS
from lexer.token import TokenType from midas.lexer.token import TokenType
class MidasLexer(Lexer): class MidasLexer(Lexer):

View File

@@ -5,6 +5,7 @@ from typing import Optional
@dataclass(frozen=True) @dataclass(frozen=True)
class Position: class Position:
"""A simple structure to store the position of a token""" """A simple structure to store the position of a token"""
file: Optional[str] file: Optional[str]
line: int line: int
column: int column: int

View File

@@ -2,7 +2,7 @@ from dataclasses import dataclass
from enum import Enum, auto from enum import Enum, auto
from typing import Any from typing import Any
from lexer.position import Position from midas.lexer.position import Position
class TokenType(Enum): class TokenType(Enum):

View File

@@ -2,8 +2,8 @@ from abc import ABC, abstractmethod
from dataclasses import dataclass from dataclasses import dataclass
from typing import Generic, TypeVar from typing import Generic, TypeVar
from lexer.token import Token, TokenType from midas.lexer.token import Token, TokenType
from parser.errors import ParsingError from midas.parser.errors import ParsingError
@dataclass(frozen=True) @dataclass(frozen=True)

View File

@@ -1,6 +1,6 @@
from typing import Optional from typing import Optional
from core.ast.midas import ( from midas.ast.midas import (
BinaryExpr, BinaryExpr,
ComplexTypeStmt, ComplexTypeStmt,
Expr, Expr,
@@ -21,9 +21,9 @@ from core.ast.midas import (
VariableExpr, VariableExpr,
WildcardExpr, WildcardExpr,
) )
from lexer.token import Token, TokenType from midas.lexer.token import Token, TokenType
from parser.base import Parser from midas.parser.base import Parser
from parser.errors import ParsingError from midas.parser.errors import ParsingError
class MidasParser(Parser): class MidasParser(Parser):

View File

@@ -1,10 +1,10 @@
import json import json
from pathlib import Path from pathlib import Path
from core.ast.printer import MidasAstPrinter from midas.ast.printer import MidasAstPrinter
from lexer.midas import MidasLexer from midas.lexer.midas import MidasLexer
from lexer.token import Token from midas.lexer.token import Token
from parser.midas import MidasParser from midas.parser.midas import MidasParser
def test_midas(): def test_midas():

View File

@@ -8,12 +8,12 @@ from dataclasses import asdict, dataclass, field
from pathlib import Path from pathlib import Path
from typing import Iterator, Optional from typing import Iterator, Optional
from core.ast.json_serializer import AstJsonSerializer from midas.ast.json_serializer import AstJsonSerializer
from core.ast.midas import Stmt from midas.ast.midas import Stmt
from lexer.base import MidasSyntaxError from midas.lexer.base import MidasSyntaxError
from lexer.midas import MidasLexer from midas.lexer.midas import MidasLexer
from lexer.token import Token from midas.lexer.token import Token
from parser.midas import MidasParser from midas.parser.midas import MidasParser
DEFAULT_BASE_DIR: Path = Path() / "tests" DEFAULT_BASE_DIR: Path = Path() / "tests"