This post covers the complex (but rewarding) process of building native language support for JetBrains from scratch. From crafting lexers and parsers to wrestling with soft keywords, PSI trees, and error recovery, this guide walks through the real stuff.