feat(cli): integrate checker in compile command
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
import ast
|
import ast
|
||||||
|
import logging
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
from typing import Optional, TextIO
|
from typing import Optional, TextIO
|
||||||
|
|
||||||
import click
|
import click
|
||||||
@@ -8,11 +10,13 @@ import midas.ast.midas as m
|
|||||||
import midas.ast.python as p
|
import midas.ast.python as p
|
||||||
from midas.ast.location import Location
|
from midas.ast.location import Location
|
||||||
from midas.ast.printer import PythonAstPrinter
|
from midas.ast.printer import PythonAstPrinter
|
||||||
|
from midas.checker.checker import Checker
|
||||||
from midas.cli.highlighter import Highlighter, MidasHighlighter, PythonHighlighter
|
from midas.cli.highlighter import Highlighter, MidasHighlighter, PythonHighlighter
|
||||||
from midas.lexer.midas import MidasLexer
|
from midas.lexer.midas import MidasLexer
|
||||||
from midas.lexer.token import Token, TokenType
|
from midas.lexer.token import Token, TokenType
|
||||||
from midas.parser.midas import MidasParser
|
from midas.parser.midas import MidasParser
|
||||||
from midas.parser.python import PythonParser
|
from midas.parser.python import PythonParser
|
||||||
|
from midas.resolver.resolver import Resolver
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
@click.group()
|
||||||
@@ -23,7 +27,15 @@ def midas():
|
|||||||
@midas.command()
|
@midas.command()
|
||||||
@click.argument("file", type=click.File("r"))
|
@click.argument("file", type=click.File("r"))
|
||||||
def compile(file: TextIO):
|
def compile(file: TextIO):
|
||||||
raise NotImplementedError
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
source: str = file.read()
|
||||||
|
tree: ast.Module = ast.parse(source, filename=file.name)
|
||||||
|
parser = PythonParser()
|
||||||
|
stmts: list[p.Stmt] = parser.parse_module(tree)
|
||||||
|
resolver = Resolver()
|
||||||
|
resolver.resolve(*stmts)
|
||||||
|
checker = Checker(resolver.locals, base_dir=Path(file.name).resolve().parent)
|
||||||
|
checker.check(stmts)
|
||||||
|
|
||||||
|
|
||||||
@midas.group()
|
@midas.group()
|
||||||
@@ -109,3 +121,7 @@ def highlight(output: TextIO, file: TextIO):
|
|||||||
else:
|
else:
|
||||||
raise ValueError("Unsupported file type")
|
raise ValueError("Unsupported file type")
|
||||||
highlighter.dump(output)
|
highlighter.dump(output)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
midas()
|
||||||
|
|||||||
Reference in New Issue
Block a user