Open file / directory

This commit is contained in:
Mylloon 2023-06-01 11:57:50 +02:00
parent b26f4abefa
commit a27c0822fa
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 69 additions and 33 deletions

64
gui.py
View file

@ -1,8 +1,9 @@
import sys
from tkinter import Frame, Label, Tk
from tkinter import Button, Frame, Label, Tk
from tkinter.filedialog import askdirectory, askopenfile
from src.clangformat import clang_format, parse_clang_format_output
from src.utils import analyze_args
from src.utils import analyze_args, exts_list
class GUI:
@ -15,7 +16,6 @@ class GUI:
def start(self) -> None:
"""Affiche la fenêtre"""
self._main_screen()
self.f.grid()
# self.change_pos(1280, 720)
self.parent.title(self.name)
self.parent.mainloop()
@ -31,28 +31,72 @@ class GUI:
self.parent.geometry(f"{x}x{y}+{x_i}+{y_i}")
def _open_file(self):
try:
chemin = askopenfile(
title=f"Choisir un fichier - {self.name}",
filetypes=[("Tous les fichiers", "*")]
+ [
(langage, f"*.{ext}")
for langage, exts in exts_list.items()
for ext in exts
],
)
except AttributeError:
print("Impossible de trouver le fichier", file=sys.stderr)
exit(1)
else:
if chemin:
return self._analyse(2, chemin.name)
def _open_directory(self):
try:
chemin = askdirectory()
except AttributeError:
print("Impossible de trouver le dossier", file=sys.stderr)
exit(1)
else:
return self._analyse(2, chemin)
def _main_screen(self):
"""Écran principal"""
Label(
self.parent,
text=f"{self.name} est une application qui permet d'utiliser "
"plus facilement clang-format",
).grid(column=0, row=0, columnspan=1)
self._analyse()
).grid(column=0, row=0, rowspan=2)
def _analyse(self) -> None:
Button(self.parent, text="Ouvrir un fichier", command=self._open_file).grid(
column=1, row=0
)
Button(
self.parent, text="Ouvrir un dossier", command=self._open_directory
).grid(column=1, row=1)
def _analyse(self, start_row: int, path: str) -> None:
"""Analyse les données"""
files = analyze_args(sys.argv[1:])
self.f.destroy()
self.f = Frame(self.parent)
self.f.grid()
files = analyze_args([path])
idx = start_row
for file in files:
clang_format_output = clang_format(file)
parsed_output = parse_clang_format_output(clang_format_output)
if parsed_output:
for idx, error in enumerate(parsed_output):
for error in parsed_output:
Label(
self.parent,
text=f"Avertissement dans {error.filename} "
f"à la ligne {error.line_number}, caractère {error.column_number}.",
).grid(column=0, row=idx + 1, columnspan=1)
).grid(column=0, row=idx, columnspan=1)
idx += 1
else:
print(f"Aucun avertissement trouvé dans {file}.")
Label(
self.parent,
text=f"Aucun avertissement trouvé dans {file}.",
).grid(column=0, row=idx, columnspan=1)
idx += 1

View file

@ -1,6 +1,20 @@
import os
import sys
exts_list = {
"CSharp": ["cs"],
"Java": ["java"],
"JavaScript": ["mjs", "js", "ts"],
"Json": ["json"],
"Objective-C": ["m", "mm"],
"Proto": ["proto", "protodevel"],
"TableGen": ["td"],
"TextProto": ["textpb", "pb.txt", "textproto", "asciipb"],
"Verilog": ["sv", "svh", "v", "vh"],
"C": ["c"],
"C++": ["cpp"],
}
def analyze_args(args: list) -> list[str]:
"""Renvoie la liste des fichiers"""
@ -33,29 +47,7 @@ def check_ext(filename: str) -> bool:
supported_exts = tuple(
map(
lambda ext: "." + ext,
[
"cs",
"java",
"mjs",
"js",
"ts",
"json",
"m",
"mm",
"proto",
"protodevel",
"td",
"textpb",
"pb.txt",
"textproto",
"asciipb",
"sv",
"svh",
"v",
"vh",
"c",
"cpp",
],
[ext for exts in exts_list.values() for ext in exts],
)
)