5 Ekstensi VS Code yang Benar-Benar Berguna untuk Python Developer
Panduan memilih ekstensi VS Code untuk workflow Python 2026: Python, Pylance, Ruff, debugpy, Mypy — integrasi dengan uv dan virtual environment.
Setup VS Code untuk Python bisa jadi berantakan kalau kita asal menginstal ekstensi. Di satu sisi ada ekstensi Python bawaan Microsoft, di sisi lain ada Ruff, Mypy, Black, isort, Flake8, autopep8, dan puluhan linter/formatter lain yang fungsinya tumpang-tindih. Hasilnya: konflik di save, error yang muncul dua kali, atau format yang berubah-ubah tergantung ekstensi mana yang menang.
Tulisan ini membahas lima ekstensi inti yang cukup untuk mayoritas workflow backend Python di 2026, dan bagaimana menyambungkannya dengan uv supaya editor dan CI bekerja dari sumber kebenaran yang sama.
1. Python (ms-python.python)
Ini adalah ekstensi dasar yang wajib ada. Dia menangani pemilihan interpreter, integrasi environment, testing, dan menyediakan access point bagi ekstensi Python lain. Tanpa ini, Pylance, debugpy, dan Mypy tidak bisa berfungsi dengan baik.
Setelah menginstalnya, pastikan VS Code mengenali virtual environment project-mu. Kalau kamu pakai uv (lihat panduan uv), jalankan:
uv init api-service
cd api-service
uv add fastapi pydantic
uv add --dev ruff mypy pytest
uv sync
VS Code biasanya otomatis mendeteksi .venv di root project, tapi kalau tidak, arahkan manual ke:
- Linux/macOS:
.venv/bin/python - Windows:
.venv\Scripts\python.exe
Salah satu kesalahan paling umum adalah meninggalkan VS Code menunjuk ke system Python, padahal project butuh dependency tertentu yang hanya ada di virtual environment.
2. Pylance (ms-python.vscode-pylance)
Pylance adalah language server yang memberikan IntelliSense, go-to-definition, refactoring, dan type analysis berbasis Pyright. Dia bukan pengganti mypy, tapi sangat berguna untuk navigasi kode dan deteksi error dasar di editor.
Mode type checking Pylance bisa diatur lewat settings.json:
"python.analysis.typeCheckingMode": "basic"
Pilihan umumnya adalah off, basic, atau strict. Untuk tim yang belum sepenuhnya mengadopsi typing, basic sudah memberikan nilai tanpa membanjiri dengan warning. Jangan berharap Pylance basic mode menegakkan aturan yang sama dengan mypy --strict; kedua tool ini saling melengkapi, bukan saling mengganti.
3. Ruff (charliermarsh.ruff)
Ruff menggabungkan linter, formatter, dan import organizer dalam satu tool yang sangat cepat. Untuk banyak project Python modern, Ruff sudah cukup menggantikan tumpukan Flake8 + Black + isort, sekaligus mengurangi konflik antar ekstensi.
Setelah menginstal ekstensi Ruff, konfigurasi di .vscode/settings.json bisa terlihat seperti ini:
{
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
"python.analysis.typeCheckingMode": "basic",
"python.testing.pytestEnabled": true,
"python.testing.unittestEnabled": false,
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
},
"mypy-type-checker.args": ["--strict"]
}
Dengan konfigurasi ini, setiap save akan otomatis format kode dan mengatur import. Ingat: Ruff mengikuti konfigurasi di pyproject.toml, jadi pastikan aturan di editor sama dengan yang dijalankan di CI.
Banyak tutorial lama masih mengajarkan untuk mengaktifkan linting legacy di ekstensi Python (python.linting.enabled, python.formatting.provider, dll). Di 2026, Ruff punya ekstensi sendiri dan tidak perlu lagi mengandalkan jalur linting lama tersebut. Mengaktifkan keduanya sering menyebabkan error muncul ganda atau format bertabrakan.
4. Python Debugger (ms-python.debugpy)
Ekstensi ini berbasis debugpy dan menangani breakpoint, step-through, conditional breakpoint, serta remote/process debugging. Secara default dia diinstal bersama ekstensi Python, tapi layak disebutkan secara eksplisit karena banyak developer masih bergantung pada print() untuk debugging async atau masalah dependency injection.
Untuk aplikasi FastAPI, konfigurasi debug bisa seperti ini di .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "FastAPI: uvicorn",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"args": ["app.main:app", "--reload"],
"jinja": true
}
]
}
Dengan konfigurasi ini, kamu bisa menjalankan server dalam mode debug, men-set breakpoint di handler endpoint, dan melihat state request secara langsung. Ini sangat membantu untuk kasus async yang susah dilacak lewat log saja.
5. Mypy Type Checker (ms-python.mypy-type-checker)
Pylance sudah memberikan type analysis, tapi banyak tim backend memilih mypy sebagai sumber kebenaran karena bisa dijalankan di CI dengan mode strict. Ekstensi Mypy Type Checker menampilkan hasil mypy langsung di panel Problems VS Code.
Perlu diingat: Pylance dan mypy kadang memberikan hasil berbeda karena implementasi dan default-nya tidak identik. Strategi yang umum:
- Pylance untuk navigasi dan feedback cepat di editor.
- mypy dengan konfigurasi project sebagai gate CI.
Jangan biarkan editor menggunakan default yang berbeda dari CI; itu membuat developer frustrasi karena kode lolos di lokal tapi gagal di pipeline.
Ekstensi yang Boleh Dilewatkan
Jupyter (ms-toolsai.jupyter) adalah ekstensi penting untuk tim data science atau yang kerja dengan notebook, tapi untuk backend API murni dia sering hanya menambah beban tanpa nilai tambah. Evaluasi apakah anggota tim benar-benar membutuhkanya sebelum menginstal.
Demikian pula, jangan menginstal Black, isort, Flake8, autopep8, atau pylint bersamaan dengan Ruff kecuali ada alasan spesifik. Tumpang-tindih tool akan membuat save behavior tidak deterministik.
Menyelaraskan Editor dengan CI
Satu prinsip penting: editor harus mencerminkan apa yang dijalankan CI. Caranya:
- Tempatkan konfigurasi tool di
pyproject.toml. - Gunakan ekstensi resmi yang membaca konfigurasi tersebut.
- Jalankan
uv run ruff check .danuv run mypy .di CI dengan konfigurasi yang sama. - Hindari override lokal di
settings.jsonkecuali memang dibutuhkan untuk semua anggota tim.
Kalau setiap developer punya setting berbeda, hasil formatting dan type check akan tidak konsisten, meskipun semua orang pakai VS Code.
Kapan Setup Ini Tidak Cukup?
Lima ekstensi di atas cukup untuk Python backend umum, tapi tidak untuk segala situasi:
- Data science / ML heavy: Jupyter, Python Environment Manager, dan ekstensi khusus seperti Jupyter Keymap menjadi lebih relevan.
- Remote development: Remote - SSH, Dev Containers, atau WSL perlu ditambahkan.
- Multi-language project: ekstensi untuk Docker, Terraform, atau frontend framework perlu dipasang terpisah.
Kesimpulan
Workflow VS Code yang bersih untuk Python 2026 tidak butuh banyak ekstensi. Pasang Python, Pylance, Ruff, debugpy, dan mypy; lalu arahkan semuanya ke virtual environment yang sama, preferabelnya dibuat dan dikelola oleh uv. Hindari tumpang-tindih tool, selaraskan editor dengan CI, dan lewatkan ekstensi yang tidak relevan dengan jenis pekerjaan tim.
Kalau kamu punya setup VS Code yang berbeda dan berhasil di tim-mu, bagikan di komentar. Saya penasaran apakah ada kombinasi lain yang sama ringkasnya.
