[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:
Artur Mukhamadiev 2026-07-10 16:09:06 +03:00
commit c3b831d519
9 changed files with 141 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.venv/
*/*/__pycache__/
*/__pycache__/

16
README.md Normal file
View 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
View 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
View File

@ -0,0 +1,3 @@
tree-sitter==0.26.0
tree-sitter-cpp==0.23.4
tree-sitter-python==0.25.0

View File

View 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()

View File

@ -0,0 +1,7 @@
import argparse
parser = argparse.ArgumentParser()
def setup_parser(desc: str):
parser.description = desc

View 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

View 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)