yuchi / hyperloop-macros

Sweet.js macros to accelerate Hyperloop development
GNU Lesser General Public License v2.1
6 stars 0 forks source link

Hyperloop Macros

Build Status Dependencies Available on NPM

Sweet.js macros to accelerate Hyperloop development.

By now only utilities for Objective-C and Java were implemented;

Installation

# Install in your project
npm install --save-dev hyperloop-macros
# Compile your source
sjs my_hyperloop_source.js --module hyperloop-macros/obj-c

Usage

Common

// Activate Hyperloop for this file
use hyperloop;

Objective-C

See the example application.

// The `native` keyword makes the class compile to Hyperloop
class native LocDelegate
  // For clarity `implements` is (also) aliased as extends
  extends NSObject
  // Protocol the class responds to
  protocol CLLocationManagerDelegate {

  // Objective-C style message definition (copy-paste-proof)
  - (void) locationManager:(CLLocationManager *) locationManager
        didUpdateLocations:(NSArray *) locations {

    // Casting is done with the `as` keyword, but for arguments is not necessary
    var locationsRecasted = locations as (NSArray *);

    // Message passing is activated with `@` in dot-notation style
    locationManager@startUpdatingLocation();

    // Since the second argument we follow Swift’s form
    locationManager@allowDeferredLocationUpdatesUntilTraveled(null, timeout: null);

    // But Hyperloop supports actual dot notation too!
    locationManager.startUpdatingLocation();

    // so do we! Attention! not for 1 argument methods!
    // see https://github.com/appcelerator/hyperloop-ios/issues/82
    locationManager.allowDeferredLocationUpdatesUntilTraveled(null, timeout: null);
  }
}

Java

// `import`s let you skip the package later in the code
import java.lang.Runnable;
import java.lang.Object;
import java.lang.Import;

// The `native` keyword makes the class compile to Hyperloop
class native public com.company.MyRunnable
  extends Object
  implements Runnable {

  // Java style properties...
  String aField;
  String anotherField;

  // And transparent transformation of expressions!
  int aPrimitive = 42;

  // Java style annotations...
  @Override
  // Method modifiers and return types
  public void run() {
    console.log('Here we are!');
  }

  // And Java style method arguments too!
  public Integer someOtherMethod(Integer boxed, int unboxed) {
    // Casting is done with the `as` keyword
    return (boxed as int) + unboxed;
  }
}

C++

TODO

License

This library, Hyperloop Macros, is free software ("Licensed Software"); you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; including but not limited to, the implied warranty of MERCHANTABILITY, NONINFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA