Automatiseer en integreer Sublime Text met externe tools via aangepaste scripts
description
Met deze prompt kan de gebruiker Sublime Text slim automatiseren en koppelen aan andere ontwikkeltools, waardoor tijd wordt bespaard, fouten worden verminderd en een naadloze workflow ontstaat. Dit is een geavanceerdere aanpak dan alleen sneltoetsen of plugins, omdat het maatwerk scripting toevoegt.
prompt
Help me bij het maken van aangepaste scripts om Sublime Text te automatiseren en te integreren met externe tools of diensten zoals linters, formatteringsprogramma's of CI/CD pi ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een overzicht van hoe je Sublime Text kunt automatiseren en integreren met Black en pytest, inclusief voorbeeldscripts en instructies.
1. Black Formatter integreren
--------------------------------
Black is een populaire Python code formatter. Je kunt een build- of commando-systeem in Sublime Text gebruiken om Black automatisch te runnen.
A. Gebruik een build-commando:
Maak een nieuw build-systeem aan:
- Ga naar `Tools` > `Build System` > `New Build System...`
- Voeg de volgende inhoud toe:
```json
{
"shell_cmd": "black \"$file\"",
"file_regex": "^[^:]*:(\\d+):?(\\d+)?"
}
```
- Sla dit op als bijvoorbeeld `Black.sublime-build`.
B. Gebruik een plugin of command:
Je kunt ook een custom command maken in Python:
```python
import sublime
import sublime_plugin
import subprocess
class FormatWithBlackCommand(sublime_plugin.TextCommand):
def run(self, edit):
file_path = self.view.file_name()
if not file_path:
sublime.error_message("Bestand moet eerst opgeslagen worden.")
return
cmd = ["black", file_path]
try:
subprocess.run(cmd, check=True)
self.view.run_command("revert")
sublime.status_message("Code geformatteerd met Black.")
except subprocess.CalledProcessError:
sublime.error_message("Fout bij formatteren met Black.")
```
Dit script kun je plaatsen in jouw `Packages/User` directory en aanroepen via de command palette.
---
2. pytest integreren
----------------------
Voor het draaien van pytest kun je eveneens een build-systeem of een custom command gebruiken.
A. Build-systeem voor pytest:
```json
{
"shell_cmd": "pytest \"$file\"",
"selector": "source.python"
}
```
Sla dit op als bijvoorbeeld `Pytest.sublime-build`.
B. Custom command in Python:
Maak een Python plugin:
```python
import sublime
import sublime_plugin
import subprocess
class RunPytestCommand(sublime_plugin.WindowCommand):
def run(self):
view = self.window.active_view()
file_path = view.file_name()
if not file_path:
sublime.error_message("Open eerst een Python-bestand.")
return
cmd = ["pytest", file_path]
try:
output = subprocess.check_output(cmd, universal_newlines=True)
self.window.new_file().insert(edit=None, string=output)
except subprocess.CalledProcessError as e:
sublime.error_message("Fout bij pytest:\n" + e.output)
```
Deze plugin voert pytest uit op het actuele bestand en toont de output in een nieuw tabblad.
---
3. Automatisering en integratie met CI/CD
--------------------------------------------
Voor volledige CI/CD-integratie kun je externe scripts of tools gebruiken die je via Sublime Text kunt triggeren, zoals via build-systemen of externe commando's.
Bijvoorbeeld:
- Maak een build-systeem dat een shell-script aanroept dat jouw tests en formattering uitvoert.
- Gebruik tools zoals `lint-staged` of `pre-commit` hooks om code te valideren voordat je commit.
- Voor externe diensten kun je API-aanroepen integreren in je scripts, bijvoorbeeld via Python `requests` module.
---
Samenvatting:
- Maak aangepaste build-systemen voor snelle uitvoering.
- Gebruik Python plugins voor meer geavanceerde automatisering.
- Trigger externe tools via shell-commando's binnen Sublime Text.
Wil je dat ik een volledig werkend voorbeeld voor een van deze tools verder uitwerk?
provider: deepseek
model: deepseek-chat
Zeker, ik help je graag met het automatiseren van Sublime Text voor Black en pytest. Hier zijn praktische scripts en uitleg:
### 1. Black Formatter Integratie
**Python Script voor Black:**
Maak een bestand `black_format.py` in je Packages/User map (zoek via Preferences > Browse Packages):
```python
import sublime
import sublime_plugin
import subprocess
import os
class BlackFormatCommand(sublime_plugin.TextCommand):
def run(self, edit):
# Sla het bestand eerst op
self.view.run_command("save")
file_path = self.view.file_name()
if not file_path or not file_path.endswith('.py'):
sublime.status_message("Alleen Python bestanden worden ondersteund")
return
try:
# Voer Black uit op het huidige bestand
result = subprocess.run([
'black',
'--line-length', '88',
file_path
], capture_output=True, text=True, timeout=30)
if result.returncode == 0:
sublime.status_message("Black formatting voltooid")
# Herlaad het bestand om wijzigingen te zien
self.view.run_command("revert")
else:
sublime.error_message(f"Black error: {result.stderr}")
except subprocess.TimeoutExpired:
sublime.error_message("Black timeout - proces duurde te lang")
except FileNotFoundError:
sublime.error_message("Black niet geïnstalleerd. Installeer via: pip install black")
```
**Keybinding toevoegen:**
Voeg toe aan je gebruikers keybindings (Preferences > Key Bindings):
```json
{
"keys": ["ctrl+alt+b"],
"command": "black_format",
"context": [
{ "key": "selector", "operator": "equal", "operand": "source.python" }
]
}
```
### 2. pytest Integratie
**Build System voor pytest:**
Maak een bestand `Pytest.sublime-build` in Packages/User:
```json
{
"shell_cmd": "python -m pytest -v --tb=short",
"working_dir": "${project_path:${folder}}",
"file_regex": "^.*::(.*)::(.*) (PASSED|FAILED|ERROR)",
"selector": "source.python",
"env": {
"PYTHONPATH": "${project_path:${folder}}"
},
"variants": [
{
"name": "Current File",
"shell_cmd": "python -m pytest -v --tb=short ${file}"
},
{
"name": "With Coverage",
"shell_cmd": "python -m pytest --cov=. --cov-report=term-missing"
}
]
}
```
**Python Script voor pytest UI:**
Maak `pytest_runner.py`:
```python
import sublime
import sublime_plugin
import subprocess
import os
class PytestRunCommand(sublime_plugin.WindowCommand):
def run(self, test_target=None):
window = self.window
file_path = window.active_view().file_name() if window.active_view() else None
if test_target is None:
test_target = file_path if file_path else "."
try:
# Voer pytest uit
result = subprocess.run([
'python', '-m', 'pytest',
'-v',
'--tb=short',
test_target
], capture_output=True, text=True, cwd=window.folders()[0] if window.folders() else os.path.dirname(file_path))
# Toon resultaten in output panel
self.display_results(result)
except Exception as e:
sublime.error_message(f"pytest uitvoerfout: {str(e)}")
def display_results(self, result):
output_panel = self.window.create_output_panel("pytest_results")
self.window.run_command("show_panel", {"panel": "output.pytest_results"})
output_text = f"Exit code: {result.returncode}\n\n"
output_text += "STDOUT:\n" + result.stdout + "\n\n"
if result.stderr:
output_text += "STDERR:\n" + result.stderr
output_panel.run_command("append", {"characters": output_text})
class PytestRunFileCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.window().run_command("pytest_run", {"test_target": self.view.file_name()})
```
### 3. Gebruik en Uitvoering
**Installatie vereisten:**
```bash
pip install black pytest
```
**Sneltoetsen toevoegen:**
```json
// In je gebruikers keybindings
[
{
"keys": ["ctrl+alt+b"],
"command": "black_format",
"context": [{"key": "selector", "operand": "source.python"}]
},
{
"keys": ["ctrl+alt+t"],
"command": "pytest_run_file",
"context": [{"key": "selector", "operand": "source.python"}]
}
]
```
**Build System gebruiken:**
- Selecteer Tools > Build System > Pytest
- Gebruik Ctrl+B om tests uit te voeren
- Ctrl+Shift+B voor varianten (current file, coverage)
### 4. Project-specifieke Configuratie
Maak een `.sublime-project` bestand:
```json
{
"folders": [{"path": "."}],
"build_systems": [
{
"name": "Project Pytest",
"shell_cmd": "python -m pytest tests/ -x",
"working_dir": "${project_path}"
}
]
}
```
### Tips:
1. Zorg dat Python en de tools in je PATH staan
2. Gebruik `which black` en `which pytest` om te controleren of ze bereikbaar zijn
3. Voor virtuele environments: pas de `shell_cmd` aan naar het volledige pad
4. Log output via `sublime.log_commands(True)` voor debugging
Deze scripts geven je een solide basis voor automatisering. Je kunt ze verder uitbreiden met extra features zoals auto-format on save of geïntegreerde test resultaten weergave.