Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Java
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
META-INF
doc
src
README.md
swtbrowser-test.iml

README.md

About

This intellij plugin should some day evolve to a plugin API where the GUI part runs in a browser and the plugin itself can be written in Ruby/Javascript/HTML/CSS and loaded dynamically.

Plugin Brainstorming

Snippet Plugin

  • annotate code (lines ?)
  • serve snippets from GIT ? -> git VFS
  • search snippets (name, content, language ...)
  • link to source repository (revision, line)
  • insert placeholders/variables which are evaluated by the IDE
  • publish on pasties/gists
  • snippet creation notifications: twitter, jabber, email, google+, RSS ...
  • ruby API gem
  • optional per project configuration (recipients ...)?

Snippet Server

  • Rails, Elastic Search Plugin

Example plugins

eSnippet, Gist Plugin

Support repositories

SWT Snippets, Gists, Pasties ...

Technologies

  • Ruby SWT
  • SWT/AWT Bridge to embed webkit browser
  • jquery backbone.js ...

Ruby Plugin API Design

  • define the objects you are working with
  • define the contexts that are available
  • define the actions which are possible in a specific context

Ruby Internal DSL Design

Principles

  • Deconstruct functional units
  • Cut down the crap
  • Make the Jump from brain to code smaller
  • Avoid common traps/failures
  • Build small DSLs and mesh them together

  • Create a template DSL file

  • Break that into tests

DSL Language Support

  • Method chaining (return self, maintain state in a single object)
  • Dynamic dispatching (using method_missing) to wrap other APIs
  • Closures, instance_eval, nested closures
  • Proxy Pattern
  • Macros (Methods that generate code) e.g: attr_accessor

DSL Examples

  • Active Records, Rails Templates, RSpec, Ambition, Foundry ...
Something went wrong with that request. Please try again.