Coder Social home page Coder Social logo

lighttable-groovy's Introduction

Groovy plugin for Light Table

This plugin aims to provide Groovy support for the Light Table IDE. At the moment it is quite rudementary. The short term plan is to grow it into a feasible groovy console/groovy shell alternative with some unique features enabled by the Light Table platform. A long term plan would be to slowly grow it into a feasible Groovy IDE alternative.

Installation / Getting started

  • The plugin is available from the Light Table plugin manager under the name Groovy.
  • Check out the screencast

Development/Contributing

If you wish to submit pull request. Just fork this repo and install the plugin by cloning the repo into your Light Table plugin directory.

  $ cd /path/to/config/LightTable/plugins && git clone [email protected]:rundis/LightTable-Groovy.git

To build the groovy bits a Gradle wrapper script is provided:

  $ ./gradlew build deploy

Requirements

  • You need to have groovy installed and available in your PATH. I would recommend using GVM

Features/Usage

Syntax highlighting

Simple syntax highlighting is provided throught the use of CodeMirror groovy mode.

Evaluate Groovy on Demand

  • ctrl/cmd-shift-enter evaluates all content in the current editor, prints any output to the console and shows results line by line.
  • ctrl/cmd-enter evaluates the selected text/current line, prints output to the console and shows results inline for selected line(s).

Values for all top level expressions are shown. In looping constructs a max of 10 values are displayed for any given line. Exceptions are also displayed. If there are any exceptions, any values recorded prior to the exception arising are also shown.

Bindings

Bindings are stored/cached per editor. This gives you a behavior resembling a repl, but with many limitations. Anything that is evaluated is run as a groovy script, so obviously the same restrictions apply.

def myVar = 4

println myVar // will crash if you evaluate each line separately (ie two separate evals)
myVar = 4

println myVar // will work fine when evaluating lines separately, because myVar will be stored in binding
def myDouble(x) {x*2} // evaluates and results in a closure stored in bindings

myDouble(2) // I can invoke it

myDouble.curry(4)() // Its a closure not a method !

If you wish to clear all bindings for an editor invoke the command Groovy: Clear bindings for current editor (you probably would want to assign your own keyboard shortcut for it !)

Gradle integration

You can connect the groovy plugin to a gradle project (its using the Gradle tooling API under the hood). Just use the command Add connection and select "Groovy" from the list. Then select the directory where your build.gradle file resides. NOTE Won't work on multiprojects

Once connected you can import and use classes available from the classpath of that project. 3rd party libraries are available without further ado, but for project internal classes you must explicitly compile your project (and it expects classes to reside in the default location: build/classes/main).

Gradle task execution

When you have connected to a Gradle project you can invoke tasks (currently only one at a time).

  • Select command: Groovy: Select gradle task
  • A list of available tasks is shown
  • Select task
  • The task will be executed and progress shown in the status bar. If there is an error the stacktrace is logged to the console.

Enable logging

If you wish to enable debug logging from the groovy client. Add the following to your user.behaviors

  :editor.groovy [(:lt.plugins.groovy/client-enable-logging)]

Output is written to: $groovy-plugin-dir$/lt_groovy.log

Version history

  • 0.0.5 Execute Gradle tasks for connected gradle project (with progress reporting)
  • 0.0.4 Connect to gradle projects for exploratory testing of any classes in the classpath. Methods are now stored as closure binding variables.
  • 0.0.3 A hint of REPL. Storing binding variables between evals allows for a more REPL like experience.
  • 0.0.2 Inline results for almost any top level line expression yielding values are shown. Removed display of binding variables (no longer needed). The majority of the features for this release are due to awesome groovy ast contributions from Jim White
  • 0.0.1 Support for simple syntax highligting and evaluation of groovy scripts with inline results.

License

GPLv3 license, same as Light Table. See LICENSE.md for the full text.

lighttable-groovy's People

Contributors

rundis avatar jimwhite avatar gregopet avatar

Watchers

Ronny Løvtangen avatar James Cloos avatar

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.