Sublime Text als volwaardige PHP IDE

Gepost in Development, PHP, 8 maanden geleden Leestijd: 9 minuten
image

De Integrated Development Environment, kortweg IDE is een van de belangrijkste tools van een developer. De meesten hebben dan ook vurige meningen over welke de beste is. Er worden oorlogen over uitgevochten. Met als bekendste voorbeeld: de eeuwige en al decennia durende strijd tussen vim en emacs gebruikers.

Binnen de PHP gemeenschap is PhpStorm zeer populair, en niet zonder reden. Je wordt bijna voor gek verklaard als je iets anders gebruikt als PHP developer. Dat vind ik onterecht.

Zelf gebruik ik al heel lang Sublime Text (hierna: ST). Die gebruikte ik al toen ik nog Perl programmeerde, en deze ben ik blijven gebruiken. Ik vind het een uiterst prettige editor en dankzij heel veel beschikbare plugins kan ie minstens even veel als PhpStorm. Bovendien is ST veel lichter en sneller, en volledig taal-agnostisch. De makers van PhpStorm hebben aparte IDEs voor andere talen zoals PyCharm voor Python of IntelliJ IDEA voor Java, maar serieus, wie wil er nou een aparte IDE per taal gebruiken?

Sublime Text is qua interface heel minimalistisch. Dat vind ik fijn: geen overdaad aan windows en panes, maar alleen een kale editor, met hoogstens een zijpanel voor bestanden en mappen, en een console voor meldingen en diagnostics, die met een druk op ESC weer verdwijnt. En als deze interface nog te druk voor je is, is er ook nog de Distraction Free Mode.

ST is vrijwel volledig met het toetsenbord te bedienen. Alle commando's zijn (behalve via het menu of via vrij instelbare shortcuts) snel bereikbaar door middel van de handige command palette, die je oproept dmv ctrl-shift-p. Tik een deel (of een paar willekeurige letters) van de naam van het commando in, en je vindt het heel snel.

Hetzelfde geldt voor de file palette die via ctrl-p bereikbaar is. Hiermee zijn alle bestanden binnen je project heel snel bereikbaar. Andere editors hebben dit concept inmiddels gekopieerd, maar (voorzover ik weet) was ST de eerste.

Iets anders waar ik niet meer zonder zou kunnen is multi-cursor functionaliteit. Ook zoiets wat inmiddels breed gekopieerd is door anderen. Selecteer bijv een stukje tekst dat meerdere keren voorkomt, en met ctrl-d wordt de volgende match ook geselecteerd, met een extra cursor. Je kan dus op meerdere plekken tegelijkertijd editen.

Ik hou van de command line interface en daarom vind ik het fijn dat ST ook een command line tool heeft, subl. Hiermee kun je snel een bestand, folder of project openen via de command line. Daarnaast kun je er zelfs commando's in ST mee uitvoeren.

Een kale installatie van ST is precies dat: nogal kaal. Je hebt eigenlijk alleen de editor. Die editor is uitstekend, en bevat ondersteuning voor oa syntax highlighting, en wat andere features zoals automatische symbol lists en (beperkte) auto suggests, wat het boven een standaard editor uittilt, maar ST wordt pas echt krachtig met plugins.

Je vindt alle plugins in Package Control. Deze zijn direct in ST te installeren, nadat je de gelijknamige plugin hebt geinstalleerd via het command palette.

Hieronder licht ik een aantal plugins uit die in mijn ogen onmisbaar zijn, met name voor PHP developers. In min of meer willekeurige volgorde. Dit is zeker geen uitputtende lijst.

Laten we beginnen met de plugin die van ST een echte volwaardige IDE maakt: LSP, oftewel het Language Server Protocol. Dit is ooit door Microsoft ontwikkeld voor VS Code. Inmiddels is het een open standaard en hebben veel editors en IDEs er ondersteuning voor, waaronder natuurlijk VS Code, Atom, alle Jetbrains producten en ST.

LSP zorgt voor intelligente code analyse, en biedt daarmee oa context-gevoelige code-suggesties, uitgebreide code linting, "goto definition", "find references", en slimme refactoring tools zoals het project-breed hernoemen van classes, functies en variabelen. Inmiddels zijn er voor zowat alle talen wel implementaties beschikbaar. LSP is echt De Bom en een absolute Must Have voor elke developer. Het maakt je leven zo ontzettend veel makkelijker.

Dit is een LSP implementatie voor PHP. Hiervan bestaan er meerdere, maar dit is de beste. Geloof me, ik heb ze allemaal uitgeprobeerd. Dit is dezelfde implementatie als die in VS Code zit. Intelephense bestaat als een volledig functionele gratis versie, en daarnaast een betaalde versie voor slechts 15 dollar (eenmalig), waarvoor je (door middel van een licence key) een aantal nuttige premium features krijgt. Absoluut het geld waard.

Json lijkt op het eerste gezicht een formaat waar LSP niet zo veel toevoegt. Maar dan vergeet je dat json schema-gebaseerd kan zijn, en die snapt deze LSP implementatie. Handig als je bijvoorbeeld OpenAPI json bestanden aan het bewerken bent.

Maar vooral: de configuratie van ST zelf staat volledig in json-bestanden, en LSP-json snapt dat ook. Dat betekent dat je uiterst handige feedback en suggesties krijgt bij het bewerken van deze configuratiebestanden. Onmisbaar. Eigenlijk zou deze plugin standaard in ST moeten zitten.

Er zijn voor LSP heel veel andere talen/formaten beschikbaar. Zoals oa: LSP-typescript, LSP-css of als je met Tailwind werkt: LSP-tailwindcss. Zie Package Control voor een volledige lijst.

Daarnaast bestaan er ook LSP implementaties waar (nog) geen aparte ST plugin voor is, zoals Perl::LanguageServer. Ook die zijn te gebruiken in ST maar dan moet je die handmatig configureren in de LSP settings.

Nooit meer browsers openen om naar de PHP documentatie te gaan, bekijk alle documentatie rechtstreeks in ST!

Syntax highlighting voor Laravel blade bestanden.

Dit is niet meer dan een aantal makkelijke shortcuts naar de Laravel documentatie, maar ik gebruik deze toch erg vaak.

Dit is eigenlijk een wrapper om meerdere code analyse tools heen: PHP codesniffer (phpcs), een standaard PHP linter (dmv php -l), en de PHP mess detector (phpmd). Daarnaast kan deze plugin je PHP code formatten met php-cs-fixer of phpcbf. Dit kan handmatig of automatisch, elke keer als je het bestand opslaat.

Phpactor (spreek uit: factor) is een krachtige code analyse / refactoring tool voor PHP. Er bestaat een LSP implementatie van maar ook een RPC implementatie, die allebei te gebruiken zijn in ST. De LSP implementatie vind ik minder goed dan Intelephense, maar de RPC implementatie is een goede aanvulling. Phpactor biedt een aantal krachtige functies waaronder:

  • automatische detectie en correctie van namespace en class

  • automatisch importeren van classes

  • projectbreed hernoemen van classes

  • generatie / aanvullen van constructor function op basis van class properties

  • generatie van stubs op basis van contracts/interfaces

  • https://github.com/tkotosz/sublime-phpactor-plugin

Dit is zoals de naam zegt, een client voor xdebug, het debugging framework van PHP.

Elke developer heeft wel eens zitten worstelen met haakjes of brackets die niet goed matchen. Standaard krijg je in ST wel visuele feedback over waar de openings- of sluitings-haak/bracket staat, maar die biedt niet altijd genoeg duidelijkheid. Met BracketHighlighter wordt het allemaal een stuk beter, en deze plugin werkt bovendien ook met html-tags, en ondersteunt zelfs custom tags die je zelf kan definieren.

Onmisbaar als je in een team werkt met afgesproken coding standards. Deze plugin zorgt voor gelijke coding standards zoals ingesteld in een .editorconfig bestand, zie https://editorconfig.org/.

Een framework voor code linting, met andere woorden: syntax checks van je code. Minder krachtig dan LSP maar toch erg handig. Aan alleen de plugin heb je niks, je moet ook de bijbehorende linter voor de talen installeren, zoals bijv SublimeLinter-csslint. Zie Package Control voor de volledige lijst.

Met deze plugin kun je makkelijk geselecteerde tekst converteren naar of vanuit base64, base32 en base16.

In het verlengde van de vorige, kun je hiermee geselecteerde tekst door URLEncode/Decode halen.

Als je wel eens werkt met CSV bestanden, maar je hebt niet altijd zin om je spreadsheet-applicatie te openen, dan is Rainbow CSV handig. Het zorgt voor aparte kleuren per kolom, en voor mouseover popups met daarin de kolomnaam. Daarnaast biedt het zelfs een SQL-achtige query mogelijkheid.

Het kan wel even tijd kosten om je ST installatie helemaal naar wens te configureren. Als je dit helemaal op orde hebt, wil je natuurlijk niet hetzelfde doen bij installatie op een andere computer. Dankzij SyncSettings hoeft dat niet. Deze slaat alle config-files (waaronder ook alle geinstalleerde plugins) op in een private GitHub gist. Op een nieuwe computer hoef je dan alleen maar de url van de gist in te vullen, en alle instellingen worden vanzelf gesynchroniseerd.

Een alternatief is PackageSync waarmee je de settings als zip kunt downloaden, en eventueel synchroniseren met iets als Dropbox of Nextcloud.

Als je met grote projecten werkt gebeurt het vaak dat je na een tijdje heel veel bestanden open hebt. Met deze plugin kun je dit overzichtelijk houden: met ctrl-alt-c (configureerbaar) sluit deze de oudste bestanden die geen wijzigingen hebben. Tabs met niet opgeslagen wijzigingen blijven altijd open. Het aantal tabs dat open blijft is configureerbaar. Daarnaast heeft de plugin ook een mogelijkheid om bijvoorbeeld alle tabs met bestanden uit een andere directory dan de huidige te sluiten.

Hiermee kun je een terminal openen in een ST tab/pane, of in de console. Handig, dan hoef je niet te switchen naar een losse terminal en kun je gewoon in je IDE blijven.

Misschien viel het je op dat ik hierboven geen enkele git gerelateerde plugin heb genoemd. Er bestaan zeker een paar plugins die zorgen voor wat git integratie, maar die zijn maar beperkt. Naast Sublime Text bestaat er Sublime Merge, een aparte full featured git client. Deze twee applicaties integreren uitstekend met elkaar, maar je kan hem ook stand alone gebruiken. Ik vind Merge zo fijn werken dat ik bijna nooit meer de command line gebruik voor git. Sublime Merge is net als Sublime Text betaald, en vereist een aparte licentie.

Gerelateerde posts

image
PHP: Frankenstein arrays

PHP is inmiddels best een mooie taal geworden, maar kent nog wel wat nare erfenissen uit het verleden. Zoals de verraderlijke Frankenstein abominatie ook wel bekend als de "array".

Lees meer →

image
Pass, the standard Unix password manager

Bijna iedereen gebruikt tegenwoordig een password manager. LastPass, 1Password, Keepass, etc. Maar slechts weinig mensen kennen "pass", de unix password manager. In deze post leg ik uit waarom pass een goede optie kan zijn voor de handige linux/unix nerd.

Lees meer →

image
Een nieuw blogplatform

Ik vond het wel eens tijd om wat meer over mijn vak te schrijven. Dus heb ik een blog opgezet. Hiervoor heb mijn eigen custom blogplatform gebouwd. En daar schrijf ik dus meteen maar een eerste post over.

Lees meer →