Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
devfest
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Anna Bulenkova
October 19, 2013
330
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
devfest
Anna Bulenkova
October 19, 2013
More Decks by Anna Bulenkova
See All by Anna Bulenkova
Performance question: functional vs imperative in Ruby @muc_rubyshift
boogiecat
1
280
How to look like a model? MongoDB for Rails apps
boogiecat
0
78
ULCAMP. RubyMine promo. Hade made, grandma recipe.
boogiecat
0
77
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Paper Plane
katiecoart
PRO
4
54k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
800
Product Roadmaps are Hard
iamctodd
55
13k
Agile that works and the tools we love
rasmusluckow
331
22k
4 Signs Your Business is Dying
shpigford
187
23k
Technical Leadership for Architectural Decision Making
baasie
3
600
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
A designer walks into a library…
pauljervisheath
211
25k
GraphQLとの向き合い方2022年版
quramy
50
15k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Transcript
Hi
Anna Bulenkova Software Developer JetBrains @povergo
RubyMine project
Surviving Environment Disasters Or how we’re suffering making Ruby support
Ruby & Java
IntelliJ platform
Ruby 1995 vs RubyMine 2009
How to make an IDE?
In fact, forget the editor... •Debugging •VCS •Visualisation •SDK &
Libraries management •Frameworks •Something cute and sweet
We still need an editor •Find errors •Autocompletion •Resolve •Find
usages •Rename
Good editor
Roots of evil?
Open Source
Dynamic typing
Errors •Syntax •Everything else
Errors •Syntax - lexer & parser •Lexer - JFlex •Parser
- yourself or GrammarKit •Everything else - need to know what it is
Syntax tree AST + PSI
Syntax tree
Errors •Syntax - lexer & parser •Everything else - need
to know what it is
42
42
Indexing: file- & stub- based •External libraries •Internal content
References •Regular •Multi-resolve
It’s easy. Sometimes
Where to go?
FQN? Haven’t heard of it.
It’s more or less fine if we know the class
Even this is ok
Reassignments
Join types
class_eval
Class eval
Class eval
Class eval
instance_eval
Instance eval
Instance eval
Instance eval: go to declaration
method_missing and friends
Not even an option
Have we met before?
But how?
undef_method and friends
DSLs They are full of evil
DSLs They are full of eval
DSLs They are full of evil
We hardcode
With our own DSL
Hiding-places •Docs •Annotations •Naming conventions •Runtime
Runtime
SLOW
Choose the lesser of two evals
Choose the lesser of two evils
With or without IDE?
@povergo
[email protected]
speakerdeck.com/boogiecat/devfest