slogan3

Ontwikkel een aangepaste Sublime Text automatisering met Python-plugins

description

Met deze prompt leer je hoe je Sublime Text kunt uitbreiden met eigen Python-plugins die specifiek zijn afgestemd op jouw taken. Dit verhoogt je efficiëntie door repetitieve handelingen te automatiseren en maakt je workflow flexibeler en krachtiger dan standaard configuraties.

prompt

Help me een aangepaste Sublime Text plugin te ontwikkelen met Python om specifieke taken te automatiseren binnen mijn workflow. Beschrijf hoe ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een stapsgewijze handleiding om een Sublime Text plugin te maken die automatisch ongebruikte imports verwijdert bij het opslaan, met behulp van Python: ### Stap 1: Maak een nieuwe plugin 1. Open Sublime Text. 2. Ga naar `Tools` > `Developer` > `New Plugin...`. 3. Een nieuw venster opent met een basis plugin-structuur. ### Stap 2: Schrijf de plugin-code Vervang de standaardcode door de volgende code: ```python import sublime import sublime_plugin import subprocess import os class RemoveUnusedImportsOnSave(sublime_plugin.EventListener): def on_post_save(self, view): # Controleer of het bestand Python is if not view.file_name() or not view.file_name().endswith('.py'): return # Pad van het huidige bestand file_path = view.file_name() # Voer de Python cleanup uit (bijvoorbeeld via isort of autoflake) # Hier gebruiken we autoflake met --remove-unused-variables en --remove-all-unused-imports # Zorg dat autoflake geïnstalleerd is in je Python omgeving command = [ 'python', '-m', 'autoflake', '--remove-all-unused-imports', '--in-place', file_path ] try: subprocess.check_call(command) # Herlaad het bestand in Sublime Text view.run_command('revert') except subprocess.CalledProcessError as e: print("Fout bij verwijderen van ongebruikte imports:", e) ``` ### Stap 3: Test de plugin 1. Sla het bestand op als bijvoorbeeld `auto_remove_unused_imports.py` in de map `Packages/User`. 2. Open een Python-bestand met ongebruikte imports. 3. Bewerk het bestand en sla het op. 4. De plugin zou automatisch moeten uitvoeren en ongebruikte imports verwijderen. ### Stap 4: Vereisten installeren - Installeer `autoflake` via pip: ``` pip install autoflake ``` - Zorg dat `autoflake` toegankelijk is vanuit de Python die Sublime Text gebruikt. Mogelijk moet je de juiste Python interpreter gebruiken of het pad aanpassen. ### Stap 5: Plugin optimaliseren - Je kunt extra checks toevoegen, bijvoorbeeld alleen uitvoeren voor bepaalde projecten. - Voeg een statusmelding toe met `sublime.status_message()` om te bevestigen dat de operatie is uitgevoerd. ### Samenvatting - Maak een nieuwe plugin in Sublime Text. - Gebruik `autoflake` via een Python subprocess om ongebruikte imports te verwijderen bij het opslaan. - Laad en test de plugin door je Python-bestanden op te slaan. Wil je dat ik je help met het verder aanpassen of uitbreiden van deze plugin?
provider: deepseek
model: deepseek-chat
Hier is een stapsgevoelige handleiding voor het ontwikkelen van een Sublime Text plugin om ongebruikte imports automatisch te verwijderen bij opslaan: ## 1. Plugin Structuur Aanmaken **Stap 1: Plugin Directory Maken** - Open Sublime Text - Ga naar `Tools` → `Developer` → `New Plugin...` - Sla dit op als `remove_unused_imports.py` in: - Windows: `%APPDATA%\Sublime Text 3\Packages\User\` - Mac/Linux: `~/.config/sublime-text-3/Packages/User/` ## 2. Plugin Code Schrijven ```python import sublime import sublime_plugin import re import ast import os class RemoveUnusedImportsOnSave(sublime_plugin.EventListener): def on_pre_save(self, view): # Alleen uitvoeren voor Python bestanden if not view.file_name().endswith('.py'): return # Haal de volledige tekst op content = view.substr(sublime.Region(0, view.size())) try: # Parse de AST om ongebruikte imports te vinden cleaned_content = self.remove_unused_imports(content) # Vervang de inhoud als er wijzigingen zijn if cleaned_content != content: view.run_command('replace_content', {'content': cleaned_content}) except SyntaxError: # Negeer syntax errors (bijvoorbeeld onvolledige code) pass except Exception as e: print(f"Fout bij verwijderen ongebruikte imports: {e}") def remove_unused_imports(self, content): # Parse de AST tree = ast.parse(content) # Verzamel alle gebruikte namen used_names = set() class NameVisitor(ast.NodeVisitor): def visit_Name(self, node): used_names.add(node.id) self.generic_visit(node) NameVisitor().visit(tree) # Verzamel import statements imports_to_keep = [] lines = content.split('\n') line_numbers_to_remove = set() for node in ast.walk(tree): if isinstance(node, (ast.Import, ast.ImportFrom)): start_line = node.lineno - 1 # Bepaal het einde van de import regel end_line = start_line while end_line < len(lines) and '\\' in lines[end_line]: end_line += 1 # Controleer of alle namen in de import worden gebruikt should_keep = False if isinstance(node, ast.Import): for alias in node.names: if alias.name in used_names or alias.asname in used_names: should_keep = True break else: # ImportFrom for alias in node.names: full_name = f"{node.module}.{alias.name}" if node.module else alias.name if alias.name in used_names or full_name in used_names: should_keep = True break if should_keep: imports_to_keep.append((start_line, end_line)) else: for line_num in range(start_line, end_line + 1): line_numbers_to_remove.add(line_num) # Bouw de nieuwe inhoud zonder ongebruikte imports new_lines = [] for i, line in enumerate(lines): if i not in line_numbers_to_remove: new_lines.append(line) return '\n'.join(new_lines) class ReplaceContentCommand(sublime_plugin.TextCommand): def run(self, edit, content): # Vervang de volledige inhoud van het bestand region = sublime.Region(0, self.view.size()) self.view.replace(edit, region, content) ``` ## 3. Plugin Testen **Stap 1: Test Bestand Maken** Maak een test Python bestand met ongebruikte imports: ```python import os import sys import json # Ongebruikt from datetime import datetime, date # Alleen datetime wordt gebruikt def test_function(): print(os.getcwd()) current_time = datetime.now() return current_time # sys wordt niet gebruikt # json wordt niet gebruikt # date wordt niet gebruikt ``` **Stap 2: Test Uitvoeren** - Sla het testbestand op - De plugin zou automatisch moeten werken - Controleer of `json` en `date` imports zijn verwijderd ## 4. Console Debugging Open de console met `Ctrl + `` en controleer op foutmeldingen. ## 5. Geavanceerde Opties (Optioneel) Voor betere controle, voeg instellingen toe: ```python # in de on_pre_save methode: settings = sublime.load_settings('Preferences.sublime-settings') if settings.get('remove_unused_imports', True): # Uitvoer code hier ``` ## 6. Installatie Controle - Herstart Sublime Text - Controleer of de plugin werkt door een Python bestand met ongebruikte imports op te slaan - Bekijk eventuele fouten in de console ## Belangrijke Opmerkingen: 1. **Backup**: Maak altijd backups voordat je de plugin gebruikt 2. **Version Control**: Gebruik Git om wijzigingen te kunnen terugdraaien 3. **Syntax Errors**: De plugin werkt niet bij syntax errors in je code 4. **Performance**: Voor grote bestanden kan er een kleine vertraging zijn bij opslaan Deze plugin gebruikt Python's AST (Abstract Syntax Tree) om nauwkeurig te bepalen welke imports daadwerkelijk worden gebruikt in je code.