SublimeText jako IDE dla Pythona.

Coding

Bardzo lubię pracować z Sublime Text - to na tę chwilę mój ulubiony edytor tekstu. Jest szybki, “responsywny”, przyjemny dla oka i łatwo go rozbudować o dodatkowe funkcje.

Należy jednak pamiętać, że bez żadnych dodatkowych pluginów to “tylko” narzędzie do pracy z plikami tekstowymi, nic ponadto.

Całkiem niedawno zaczęła się też moja przygoda z Pythonem - i naturalnie w mojej głowie pojawiło się pytanie czy Sublime mógłby zbliżyć się do IDE dla tego języka. Okazało się, że jak najbardziej - i postaram się tu przybliżyć jak to osiągnąłem.

IDE - a co to za zwierz?

Nieco upraszczając sprawę można powiedzieć, że jest to edytor tekstu wzbogacony o funkcje, które ułatwiają pracę z kodem w danym języku - np. wyświetli nam podpowiedzi słów kluczowych / składni, podświetli błędy, poprawi formatowanie, usunie “śmietki”. Czyli poprzez udostępnienie kilku fajnych opcji przyspiesza nam pracę i poprawia jakość pisanego kodu.

Bolesne początki.

Zacznę od tego co zrobiłem źle. Niesiony falą optymizmu chwyciłem kilka pierwszych lepszych artykułów o wykorzystaniu Sublime z Pythonem i zacząłem instalować polecane dodatki.

Efekt był (delikatnie mówiąc) niezadowalający. Całość niby działała, ale była masa problemów - np. składnia dopuszczalna w nowszych wersjach Pythona była oznaczana jako błędna.

Był to etap na którym frustracja wzrosła we mnie tak bardzo, że zacząłem testować alternatywne aplikacje. Właściwie w każdej z nich uzyskiwałem dobry rezultat w relatywnie prosty sposób… ale w żadnej nie pracowało się tak przyjemnie jak w Sublime.

Co więc zrobiłem źle? W sumie była to prosta sprawa - nie sprawdziłem daty materiałów z których korzystałem i kiedy były ostatnie aktualizacje “wtyczek”, które instalowałem. W przypadku programowania takie kwestie nie stoją w miejscu - trzeba upewniać się, że rozwiązania z których korzystamy są aktualne i czy wciąż są rozwijane.

Uświadomiwszy to sobie zacząłem od zera - tym razem pytając na forach Sublime i uważnie wyszukując wśród materiałów dostępnych w sieci.

Usuwanie śmieci, autouzupełnianie, dokumentacja.

W momencie gdy przygotowuję ten wpis większość rzeczy, które chciałbym mieć w edytorze są realizowane poprzez odpowiedni serwer językowy (Language Sever Protocol). Rozwiązaniem jest więc dodatek do Sublime, który dodaje do niego tę funkcjonalność.

Najprościej jest wykorzystać wbudowanego w niego menadżera pakietów (Package Control). Wystarczy uruchomić Sublime, wcisnąć “ctrl + shift + p”. W polu poleceń które się wyświetli należy zacząć wpisywać “package” i wybrać:

Package Control: Install Package

Po chwili wyświetli się lista dostępnych rozszerzeń - trzeba wyszukać LSP, wybrać je i wcisnąć enter.

Skoro obsługa LSP już działa teraz trzeba dodać serwer dla Pythona. Ponownie trzeba wywołać Package Control - tym razem jednak szukamy LSP-pyright. To nie jedyny wariant z którego można skorzystać, ale Pyright wydaje się na tę chwilę najpopularniejszą opcją - jest szybki i działa bardzo sprawnie.

Korzystając z okazji można od razu doinstalować kilka innych przydatnych rzeczy np. LSP dla yaml-a, json-a, xml-a, css-a… Wszystko zależy od tego co planuje się robić.

To przy okazji pokazuje siłę LSP - możemy rozszerzać funkcjonalność Sublime-a o kolejne języki, typy dokumentów w prosty sposób i nie jesteśmy skazani na aktualizacje wybranego pluginu. Serwery językowe nie są zazwyczaj bezpośrednio powiązane z jakąś konkretną aplikacją i są regularnie odświeżane.

Ponadto jeśli pojawi się np. jakaś lepsza opcja niż chociażby wspomniany Pyright to zmiana na nią będzie relatywnie prosta.

Mając te instalacje z głowy natychmiast widać różnicę - zaraz po stworzeniu nowego pliku .py pojawiają się sugestie, podświetlenia błędów (nawet w pionowym pasku z numerami linii po lewej - to tzw. “gutter”) itd. Bez problemu można też wyszukać miejsca w których pojawia się dana funkcja / zmienna , podmienić je itd. Super!

Jeśli nic takiego się nie wydarzy to warto sprawdzić czy mamy node / npm na naszej stacji roboczej (Pyright ich potrzebuje) i ewentualnie zerknąć w info Sublime czy nie daje nam znać o jakimś problemie. Wszystko powinno działać w przeciągu dosłownie kilku minut :) .

Automatyczne formatowanie.

Brakuej jednak dość przydatnej rzeczy - automatycznego formatowania. Ja osobiście lubię gdy aplikacja pomaga mi utrzymać konsekwentny styl w kodzie, łamie ładnie linie, dba o odstępy itd. To daje ładniejszy, czytelniejszy program, w przypadku Pythona zgodny z PEP8. Niektóre serwery językowe dodają nam również tę opcję, ale akurat Pyright nie.

Szczęśliwie są inne rozwiązania tego problemu. Ja osobiście wybrałem python-black (Package Control: Install Package -> python-black). Jest to dość bezkompromisowe rozwiązanie - ale to w nim lubię. Do tego świetnie sobie radzi z sytuacjami które zazwyczaj są kłopotliwe.

Uruchamianie kodu poprzez Terminus-a.

To już ostatni “duży” element. Oczywiście można uruchamiać pliki pythonowe korzystając z opcji wbudowanych w Sublime. Mają one jednak pewną wadę - nie działają w nich interaktywne pola tekstowe. Więc gdy napisana przez nas aplikacja CLI chce żebyśmy coś wpisali, nie jesteśmy w stanie tego zrobić.

Znacznie fajniej by było gdybyśmy mieli pełnoprawny terminal i uruchamiali wszystko przez niego. Właśnie to załatwia nam Terminus. Tutaj jest świetna instrukcja jak go dodać i jak stworzyć “build system” z jego wykorzystaniem:

https://www.youtube.com/watch?v=etIJMVIvVgg

Zrobione!

Kilka prostych działań i Sublime zamienił się w bardzo przyjazne środowisko do pracy z Pythonem. Mimo tego, że proces przygotowania go jest nieco bardziej zajmujący niż w przypadku innych rozwiązań, nie jest to wcale trudne.

Oczywiście można pójść jeszcze kilka kroków dalej - zainstalować kolejne dodatki, spróbować nowych schematów kolorystycznych, ustawić własne skróty klawiszowe itd. Do czego gorąco zachęcam - ten edytora jest niesamowicie szybki, stabilne i łatwy w rozbudowie.

Obrazek(-ki):

Ilya Pavlov, @Unsplash