11 KiB
Developer Workflow v Doom Emacs
- Úvod
- Instalace nástrojů
- Keybindings přehled
- Perl — workflow
- Python — workflow
- Go — workflow
- Ansible — workflow
- Terraform — workflow
- Podman / Dockerfile — workflow
- Go — učení (začátečník)
- Obecné tipy
Úvod
Tento dokument popisuje kompletní vývojářský workflow v Doom Emacs pro jazyky a nástroje, které Martin používá: Perl, Python, Go, Ansible, Terraform a Podman/Dockerfile. Ke každému jazyku najdeš: co nainstalovat, klávesové zkratky, příklad workflow a odkaz na ukázkový soubor v examples/.
Instalace nástrojů
Všechny nástroje se instalují přes Homebrew (macOS). Na Linuxu použij příslušný package manager.
Perl
brew install perl
cpanm Perl::Tidy Perl::Critic Perl::LanguageServer
perltidy— formatter (SPC m f)perlcritic— linterPerl::LanguageServer— LSP backend (volitelné)
Python
brew install python ruff pyright
ruff— ultra-rychlý linter + formatterpyright— type-checking LSP server
Go
brew install go gopls
go install golang.org/x/tools/cmd/goimports@latest
gopls— oficiální Go LSPgoimports— formatter (gofmt + auto imports)
Ansible
brew install ansible ansible-lint
ansible-lint— linter pro playbooky (flycheck integrace)
Terraform
brew install terraform terraform-ls
terraform-ls— HashiCorp oficiální LSP server
Podman / Dockerfile
brew install podman hadolint
hadolint— Dockerfile linter (flycheck integrace)podman— Docker-kompatibilní container runtime (daemonless)
Keybindings přehled
Všechny keybindings jsou pod SPC m (localleader) — aktivní pouze v příslušném major mode.
| Jazyk | SPC m f | SPC m r | SPC m t / b | SPC m d | SPC m i / p |
|---|---|---|---|---|---|
| Perl | perltidy format | perl run | — | perldb | — |
| Python | ruff format | python3 run | — | M-x pdb | — |
| Go | goimports | go run | go test / build | M-x dlv | — |
| Ansible | — | ansible-playbook | — | — | — |
| Terraform | terraform fmt | — | — | — | init / plan |
| Dockerfile | — | podman run | podman build | — | — |
Obecné navigační zkratky (všechny jazyky):
| Zkratka | Akce |
|---|---|
C-M-a |
Začátek funkce/subroutine |
C-M-e |
Konec funkce/subroutine |
SPC s i |
Imenu — seznam funkcí v souboru |
gd |
Go to definition (LSP/tags) |
] e / [ e |
Další/předchozí flycheck error |
SPC s p |
Grep v projektu (ripgrep) |
SPC p f |
Najít soubor v projektu |
Perl — workflow
Co nainstalovat
brew install perl
cpanm Perl::Tidy Perl::Critic Perl::LanguageServer
Keybindings
| Zkratka | Akce |
|---|---|
SPC m f |
Formátování přes perltidy |
SPC m r |
Spustit aktuální soubor |
SPC m d |
Spustit Perl debugger |
C-M-a |
Skok na začátek subroutine |
C-M-e |
Skok na konec subroutine |
SPC s i |
Imenu — seznam subs |
Příklad workflow
- Otevři soubor:
SPC p f→ vyberexample.pl - Navigace po subs:
SPC s i→ vyber subroutine ze seznamu - Pohyb mezi subs:
C-M-a(začátek),C-M-e(konec) - Formátování:
SPC m f(perltidy celý buffer) - Spuštění:
SPC m r— otevře compile buffer s výstupem - Debug:
SPC m d→ zadej soubor → v kódu přidej$DB::single = 1;pro breakpoint - Chyby:
] e/[ epro navigaci flycheck errors
Ukázkový soubor
Viz [[file:../examples/perl/example.pl][examples/perl/example.pl]] — demonstruje strict/warnings, subroutines, hashe, regex, file I/O a error handling.
Python — workflow
Co nainstalovat
brew install python ruff pyright
# Pro virtualenv: použij M-x poetry nebo conda (pyvenv je zastaralé)
Keybindings
| Zkratka | Akce |
|---|---|
SPC m f |
Formátování přes ruff |
SPC m r |
Spustit aktuální soubor |
gd |
Go to definition (pyright) |
K |
Hover docs (LSP) |
SPC s i |
Imenu — seznam tříd/funkcí |
Příklad workflow
- Otevři projekt:
SPC p p→ vyber Python projekt - Virtual env:
M-x poetryneboconda-env-activate→ aktivuj prostředí - Navigace:
SPC s ipro přehled tříd a funkcí - LSP:
gd(definice),K(docs),SPC c D(references) - Format:
SPC m f— ruff format na celý soubor - Run:
SPC m r— spustípython3 buffer.pyv compile bufferu - Debug:
M-x pdb→ zadejpython3 -m pdb soubor.py - Chyby:
] e/[ epro flycheck (ruff lint)
Ukázkový soubor
Viz [[file:../examples/python/example.py][examples/python/example.py]] — demonstruje type hints, dataclass, list comprehension, argparse a exception handling.
Go — workflow
Co nainstalovat
brew install go gopls
go install golang.org/x/tools/cmd/goimports@latest
Keybindings
| Zkratka | Akce |
|---|---|
SPC m f |
Formátování (goimports) |
SPC m r |
go run aktuální soubor |
SPC m t |
go test ./… |
SPC m b |
go build ./… |
gd |
Go to definition (gopls) |
K |
Hover docs (gopls) |
Příklad workflow
- Nový projekt:
go mod init myprojectv terminálu - Otevři:
SPC p f→main.go - LSP automaticky: gopls se spustí, poskytuje completion, diagnostiku, navigaci
- Píšeš kód: goimports automaticky doplní importy při uložení
- Run:
SPC m r→go run main.go - Test:
SPC m t→go test ./... - Build:
SPC m b→go build ./...
Ukázkový soubor
Viz [[file:../examples/go/main.go][examples/go/main.go]] — demonstruje struct, methods, error handling, goroutine a channel.
Ansible — workflow
Co nainstalovat
brew install ansible ansible-lint
Keybindings
| Zkratka | Akce |
|---|---|
SPC m r |
Spustit ansible-playbook |
] e |
Další ansible-lint chyba |
SPC s p |
Grep v projektu (role, vars) |
Příklad workflow
- Otevři playbook:
SPC p f→playbook.yml - Yaml-mode se aktivuje automaticky, ansible-lint přes flycheck
- Navigace:
SPC s ipro imenu (task names) - Spuštění:
SPC m r— spustíansible-playbook playbook.yml - Lint chyby:
] e/[ epro navigaci
Ukázkový soubor
Viz [[file:../examples/ansible/playbook.yml][examples/ansible/playbook.yml]] — demonstruje apt install, user create, template copy, handlers a vars.
Terraform — workflow
Co nainstalovat
brew install terraform terraform-ls
Keybindings
| Zkratka | Akce |
|---|---|
SPC m f |
terraform fmt |
SPC m i |
terraform init |
SPC m p |
terraform plan |
gd |
Go to definition (LSP) |
Příklad workflow
- Nový projekt: vytvoř adresář,
main.tf+variables.tf - Init:
SPC m i— stáhne providery - LSP (terraform-ls): autocompletion pro resource typy, atributy, variables
- Format:
SPC m f— terraform fmt (kanonický styl) - Plan:
SPC m p— ukáže co se změní - Apply: v terminálu
terraform apply
Ukázkové soubory
Viz [[file:../examples/terraform/main.tf][examples/terraform/main.tf]] a [[file:../examples/terraform/variables.tf][examples/terraform/variables.tf]] — demonstrují null provider, resource, variable, output a validation.
Podman / Dockerfile — workflow
Co nainstalovat
brew install podman hadolint
podman machine init # jednorázově
podman machine start
Keybindings
| Zkratka | Akce |
|---|---|
SPC m b |
podman build (zeptá se na tag) |
SPC m r |
podman run (zeptá se na image) |
] e |
Další hadolint chyba |
Příklad workflow
- Otevři
Dockerfile: dockerfile-mode se aktivuje automaticky - Hadolint: flycheck ukazuje best practices (DL3008, DL3059 atd.)
- Build:
SPC m b→ zadej tag (např.myapp:latest) → compile buffer - Run:
SPC m r→ zadej image name → spustí container
Ukázkový soubor
Viz [[file:../examples/docker/Dockerfile][examples/docker/Dockerfile]] — demonstruje multi-stage build, non-root user, HEALTHCHECK a layer caching.
Go — učení (začátečník)
Základní kroky
-
Vytvoř projekt:
mkdir myproject && cd myproject go mod init myproject -
Struktura:
myproject/ ├── go.mod ├── main.go # vstupní bod ├── internal/ # interní balíčky │ └── handler.go └── pkg/ # veřejné balíčky └── utils.go - Spusť:
go run main.go(neboSPC m rv Emacsu) - Test:
go test ./...(neboSPC m t) - Build:
go build -o myapp(neboSPC m b)
Klíčové koncepty
package main+func main()= vstupní bod- Error handling:
if err !nil { return err }= (žádné exceptions) - Goroutines:
go func()pro souběžnost - Channels:
ch :make(chan int)= pro komunikaci mezi goroutines - Interfaces: implicitní implementace (duck typing)
Příklad
Viz [[file:../examples/go/main.go][examples/go/main.go]] pro funkční ukázku všech konceptů.
Obecné tipy
| Zkratka | Akce |
|---|---|
SPC s p |
Grep v projektu (ripgrep) |
SPC p f |
Najít soubor v projektu |
SPC p p |
Přepnout projekt |
SPC g g |
Magit — git status |
SPC g B |
Git blame |
C-M-a / C-M-e |
Pohyb po funkcích (všechny jazyky) |
] e / [ e |
Flycheck: další/předchozí error |
SPC c x |
Flycheck: seznam všech errors |
SPC b b |
Přepnout buffer |
SPC w v |
Vertikální split |
SPC o t |
Otevřít terminál (vterm) |
Compile buffer
Všechny SPC m r/t/b příkazy používají Emacs compile — výstup se zobrazí v compile bufferu. Klávesy v compile bufferu:
g— znovu spustitq— zavřítRETna error řádku — skok na zdrojový kód