84 lines
3.6 KiB
Python
84 lines
3.6 KiB
Python
import os
|
|
import sys
|
|
import re
|
|
|
|
def clean_comments_in_file(filepath):
|
|
"""
|
|
Supprime le reste de la ligne à partir de '//' dans un fichier donné,
|
|
en essayant d'éviter les URL. Gère aussi les commentaires /* ... */.
|
|
"""
|
|
try:
|
|
with open(filepath, 'r', encoding='utf-8') as f_read:
|
|
content = f_read.read()
|
|
|
|
# Première passe : supprimer les commentaires /* ... */
|
|
# Utilise re.DOTALL pour que . corresponde aussi aux retours à la ligne
|
|
# et non-greedy quantifier *?
|
|
content = re.sub(r'/\*.*?\*/', '', content, flags=re.DOTALL)
|
|
|
|
cleaned_lines = []
|
|
for line in content.splitlines():
|
|
# Vérifie si la ligne contient une URL avant de chercher un commentaire
|
|
if re.search(r'https?://', line):
|
|
# Si une URL est trouvée, nous sommes très prudents.
|
|
# Nous ne supprimons les commentaires que s'ils sont CLAIREMENT après une URL et non mélangés
|
|
# Cela reste une heuristique et n'est pas parfait.
|
|
comment_index = line.find('//')
|
|
if comment_index != -1 and not re.search(r'["\']https?://.*?//', line): # Évite les // dans les URLs entre guillemets
|
|
# On tente de voir si le commentaire est vraiment à la fin de la ligne,
|
|
# après d'éventuelles guillemets.
|
|
# Ceci est une simplification et peut encore échouer.
|
|
if comment_index > line.rfind('"') and comment_index > line.rfind("'"):
|
|
cleaned_lines.append(line[:comment_index].rstrip())
|
|
else:
|
|
cleaned_lines.append(line) # Conserve la ligne si le // est potentiellement dans une chaîne/URL
|
|
else:
|
|
cleaned_lines.append(line)
|
|
else:
|
|
# Si pas d'URL, on peut être plus agressif avec les //
|
|
if '//' in line:
|
|
index = line.find('//')
|
|
cleaned_lines.append(line[:index].rstrip())
|
|
else:
|
|
cleaned_lines.append(line)
|
|
|
|
# Rejoindre les lignes avec des retours à la ligne.
|
|
# Ajoute un retour à la ligne final si le fichier en avait un.
|
|
final_content = '\n'.join(cleaned_lines)
|
|
if content.endswith('\n') and not final_content.endswith('\n'):
|
|
final_content += '\n'
|
|
|
|
with open(filepath, 'w', encoding='utf-8') as f_write:
|
|
f_write.write(final_content)
|
|
print(f"Commentaires nettoyés dans : {filepath}")
|
|
except Exception as e:
|
|
print(f"Erreur lors du traitement de {filepath} : {e}")
|
|
|
|
def main():
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python clean_comments.py <path_to_directory>")
|
|
print("Exemple: python clean_comments.py ./mon_projet_flutter")
|
|
sys.exit(1)
|
|
|
|
target_directory = sys.argv[1]
|
|
|
|
if not os.path.isdir(target_directory):
|
|
print(f"Erreur : Le chemin '{target_directory}' n'est pas un répertoire valide.")
|
|
sys.exit(1)
|
|
|
|
print(f"Nettoyage des commentaires '//' et '/* ... */' dans le répertoire : {target_directory}")
|
|
print("-" * 70)
|
|
|
|
for root, _, files in os.walk(target_directory):
|
|
for file in files:
|
|
filepath = os.path.join(root, file)
|
|
# Filtrez les types de fichiers que vous souhaitez traiter
|
|
if filepath.endswith(('.dart', '.js', '.ts', '.java', '.cpp', '.c', '.h', '.py')):
|
|
clean_comments_in_file(filepath)
|
|
|
|
print("-" * 70)
|
|
print("Nettoyage terminé.")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|