[init][minimal] Base init commit for tree-sitter seminar
:Release Notes: - Minimal example with dumping of dot graph on provided file - cpp/python files parsing :Detailed Notes: - :Testing Performed: - direct launch, no unit-tests :QA Notes: - it's okay :Issues Addressed: -
This commit is contained in:
commit
c3b831d519
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.venv/
|
||||
*/*/__pycache__/
|
||||
*/__pycache__/
|
||||
16
README.md
Normal file
16
README.md
Normal file
@ -0,0 +1,16 @@
|
||||
# Tree sitter Seminar
|
||||
|
||||
## Prerequisites
|
||||
|
||||
```bash
|
||||
$ python3 -m venv .venv
|
||||
$ source .venv/bin/activate
|
||||
$ pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Launch
|
||||
|
||||
```bash
|
||||
$ source .venv/bin/activate
|
||||
$ python3 src/ts-example
|
||||
```
|
||||
10
pyproject.toml
Normal file
10
pyproject.toml
Normal file
@ -0,0 +1,10 @@
|
||||
[project]
|
||||
name = "ts-example"
|
||||
version = "0.0.1"
|
||||
description = "Tree Sitter Usage Example"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"tree-sitter>=0.26.0",
|
||||
"tree-sitter-cpp==0.23.4",
|
||||
"tree-sitter-python==0.25.0",
|
||||
]
|
||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
tree-sitter==0.26.0
|
||||
tree-sitter-cpp==0.23.4
|
||||
tree-sitter-python==0.25.0
|
||||
0
src/ts-example/__init__.py
Normal file
0
src/ts-example/__init__.py
Normal file
43
src/ts-example/__main__.py
Normal file
43
src/ts-example/__main__.py
Normal file
@ -0,0 +1,43 @@
|
||||
import logging
|
||||
|
||||
import ts_minimal as tsmin
|
||||
from arg_conf import parser, setup_parser
|
||||
from log_conf import logger, logger_setup
|
||||
|
||||
|
||||
def parse_severity(severity: str):
|
||||
if severity == "DEBUG":
|
||||
return logging.DEBUG
|
||||
elif severity == "INFO":
|
||||
return logging.INFO
|
||||
elif severity == "ERROR":
|
||||
return logging.ERROR
|
||||
else:
|
||||
raise Exception(f"Unknown Severity level {severity}")
|
||||
|
||||
|
||||
def main_arguments():
|
||||
setup_parser("Tree Sitter Usage Python Examples startup arguments")
|
||||
global parser
|
||||
parser.add_argument(
|
||||
"-l", "--log-file", help="File in which log messages will go", default="ts.log"
|
||||
)
|
||||
parser.add_argument("-s", "--severity", help="Log severity level", default="DEBUG")
|
||||
tsmin.arguments()
|
||||
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
||||
def main():
|
||||
global logger
|
||||
args = main_arguments()
|
||||
logger_setup("Seminar-Test", parse_severity(args.severity))
|
||||
logger.info("Hi!")
|
||||
|
||||
tsmin.simple_file()
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
7
src/ts-example/arg_conf.py
Normal file
7
src/ts-example/arg_conf.py
Normal file
@ -0,0 +1,7 @@
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
|
||||
def setup_parser(desc: str):
|
||||
parser.description = desc
|
||||
24
src/ts-example/log_conf.py
Normal file
24
src/ts-example/log_conf.py
Normal file
@ -0,0 +1,24 @@
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger("Seminar-Test")
|
||||
|
||||
|
||||
def logger_setup(app_name: str, logging_level) -> logging.Logger:
|
||||
logger.name = app_name
|
||||
logger.handlers.clear()
|
||||
logger.setLevel(logging_level)
|
||||
# # create file handler which logs even debug messages
|
||||
# fh = logging.FileHandler("spam.log")
|
||||
# fh.setLevel(logging_level)
|
||||
# create console handler with a higher log level
|
||||
ch = logging.StreamHandler()
|
||||
ch.setLevel(logging_level)
|
||||
# create formatter and add it to the handlers
|
||||
formatter = logging.Formatter("[%(asctime)s] [%(name)s:%(levelname)s] %(message)s")
|
||||
# fh.setFormatter(formatter)
|
||||
ch.setFormatter(formatter)
|
||||
# add the handlers to the logger
|
||||
# logger.addHandler(fh)
|
||||
logger.addHandler(ch)
|
||||
|
||||
return logger
|
||||
35
src/ts-example/ts_minimal.py
Normal file
35
src/ts-example/ts_minimal.py
Normal file
@ -0,0 +1,35 @@
|
||||
import logging
|
||||
from sys import stdout
|
||||
from arg_conf import parser as arg_parser
|
||||
from log_conf import logger
|
||||
import tree_sitter_python as tspython
|
||||
import tree_sitter_cpp as tscpp
|
||||
from tree_sitter import Language, Parser
|
||||
|
||||
PY_LANGUAGE = Language(tspython.language())
|
||||
CPP_LANGUAGE = Language(tscpp.language())
|
||||
|
||||
def arguments():
|
||||
global arg_parser
|
||||
arg_parser.add_argument("--language", help="Setup parsing language", default="Python")
|
||||
arg_parser.add_argument("--file", "-f", help="File to parse", required=True)
|
||||
logger.debug("Added Tree Sitter Minimal Example Arguments to the list")
|
||||
|
||||
def simple_file():
|
||||
global arg_parser
|
||||
args = arg_parser.parse_args()
|
||||
parser: Parser
|
||||
if args.language == 'Python':
|
||||
parser = Parser(PY_LANGUAGE)
|
||||
elif args.language == 'C++':
|
||||
parser = Parser(CPP_LANGUAGE)
|
||||
else:
|
||||
parser = Parser(PY_LANGUAGE)
|
||||
args.language = 'Python'
|
||||
|
||||
logger.info(f"Parser is installed to {args.language}")
|
||||
|
||||
with open(args.file, 'rb') as file:
|
||||
source_code = file.read()
|
||||
tree = parser.parse(source_code)
|
||||
tree.print_dot_graph(stdout)
|
||||
Loading…
x
Reference in New Issue
Block a user