GithubHelp home page GithubHelp logo

glow's Introduction

#Glow ##What does it do? Allows you to write groovy class methods in clojure.

##How does it work? It uses groovy AST transformations to rewrite the class so that it will compile the clojure code during class initialization and then changes the method to call to the clojure RT class to invoke the clojure code at runtime when the method is called.

##Why? I like clojure but work professionally in groovy. This allows me to write some lisp without having to convert entire projects over. Additionally, I wanted to play with AST transformations.

##How do I use it?

  1. Add my maven repo to your project
  2. Add glow as a compile dependency
compile 'trashhalo:glow:0.1-SNAPSHOT'

Annotate groovy methods on a class with @Clojure to compile it as clojure.

@Clojure
def sayHello(){"""
   (let [x "Hello"]
     (println x))
"""}

You can access method params and class methods.

def getUser(){
    springSecurityService.principal.id
}

@Clojure
def greetUser(greeting){"""
    (println (str greeting ", " (.getUser this)))
"""}

You can also fiddle with the namespace definition for the class by naming a clojure method 'namespace'. Be sure make this the first class method.

@Clojure
def namespace(){"""
    (:require [clojure.string :as string])
"""}
  
@Clojure
def makeItBig(x){"""
    (string/capitalize x)
"""}

glow's People

Stargazers

Khaled.Noordin avatar Claudia Doppioslash avatar Kyle Feng avatar Joey Smith avatar

Watchers

Khaled.Noordin avatar James Cloos avatar  avatar

glow's Issues

Add ability to tweak clojure namespace

Right now the namespace is created with the name of the class. There is no way to plug into the process and add additional requires. This needs to get fixed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.