slogan3

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

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.