Znowu robię własny edytor 😆

Znowu robię własny edytor.

Ale tym razem edytor kodu. W sumie jeszcze takiego nie robiłem. Tzn. chciałem kiedyś zrobić własne IDE, ale wykorzystując gotowy widżet edytora (używałem wtedy CodeMirror). Jednak teraz idę dalej i chcę zrobić cały edytor kodu, tak żeby mieć nad wszystkim kontrolę.

Na razie myślę, że to tak zrobię (to może się zmienić jeszcze):

  • do trzymania tekstu w edytorze planuję użyć struktury danych zwanej "piece table", może dodatkowo każda linijka będzie miała osobną tablicę kawałków. Zobaczę.
  • Zacznę to pisać w JS używając HTML/CSS do wyświetlania kodu. Nie będzie to docelowa technologia - planuję później stopniowo to przepisywać na Rust i wgpu. Docelowo będzie to apka desktopowa, natywna (żeby edytor szybko działał, bez jakichś Electronów), ale z możliwością odpalania jej również w przeglądarce (bo lepsza promocja - więcej osób wejdzie na stronę i potestuje sobie online, niż będzie ściągać cały edytor i instalować u siebie).
  • Do renderingu fontów użyję jakiejś biblioteki w Rust. Ogólnie to jest rzecz, którą potrzebuję ogarnąć jeszcze. Poza samym renderingiem, będę potrzebować przeliczać je z pikseli na pozycję kursora itp.
  • Sprawdzałem jak zrobić copy/paste i w przeglądarce są eventy do tego https://developer.mozilla.org/en-US/docs/Web/API/Element/paste_event Nie wiem natomiast jak to natywnie wygląda, integracja z systemem, i czy będę mógł raz napisać i odpalać na wszystkich systemach, czy może będę potrzebował napisać w Rust osobny kod do obsługi copy/paste dla Maka, Windowsa i Linuksa osobno? Nie wiem. Temat do sprawdzenia. Jeszcze też nie wiem, jak zrobić w Rust integrację z okienkami wyboru plików (a chciałbym, żeby były natywne - o ile resztę GUI zrobię customowo, to jednak okna wyboru plików lepiej żeby były zintegrowane z systemem
  • Do podświetlania składni/parsowania plików rozważam wykorzystanie tree-sittera, ale nie znam jego możliwości i parametrów (ile będzie zajmować bundle wasmowe używające tree-sittera? Czy nie za dużo? Zobaczę dopiero

No i na razie jestem na etapie ekscytacji, ale pewnej demotywacji, bo na razie będzie grunt work - porobić prototypy, posprawdzać pewne rzeczy, napisać masę boilerplate'u związanego z renderingiem, zobaczyć co się da zrobić łatwo, czego nie. Może zrezygnować z czegoś. Dużo takiej rutynowej nudnej roboty, ale jednocześnie eksperymentalnej. Więc będę coś pisać (ten etap eksperymentów może mi zająć z kilka tygodni), a nie będę miał się za bardzo czym pochwalić i z czego być dumny jeszcze. Chociaż patrząc długofalowo - będzie to fajne.

Komentarze

Popularne posty z tego bloga

Dlaczego nie da się nadgonić frontendu

Absurdy Rekrutacji 2023

Przygody juniora (1)