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
tags
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.